MSSQL 데이터베이스에 많은 데이터가 있습니다. 필자는 필자에게 필자가 필요로하는 데이터를 얻기 위해 쿼리를 작성하여 분석하기 위해 해당 데이터를 R에로드하려고합니다.SQL to R 데이터 읽기 데이터 변경
문제점 : 데이터를 R로로드 할 때 CustomerID 번호가 변경되고 있습니다. 즉, SQL 서버의 CustomerID는 "xxxx0101"으로 표시됩니다. [xxxx가있는 CustomerID 필드가 끝에 가까울 때만 변경되었음을 나타냅니다. ]하지만 R에서는 "xxxx2724"로 표시됩니다 (따옴표는 문자열을 나타내지 않습니다. SQL의 데이터 유형은 varchar (30)이고 R은 데이터 유형을 자동 할당하는 것으로 나타남). 또한 내 DataValues에 라운딩 할 것이다 (SQL : 2.84 .... 7366 R : 2.84 ..... 6575)
SQL 테이블 구조 : 같은 정보가로 나타납니다 R에서
CustomerID | DataValue
xxxxxxx0101 | 2.84...7366
:
CustomerID | DataValue
xxxxxxx2724 | 2.84...6575
그리고 왜 R이 내 필드의 값을 변경하는지 이해할 수 없습니다.
R 코드 :
require(RODBC)
myScript = paste(gsub("\t", " ", readLines("TestQuery.sql")), collapse = " ")
myData = data.frame(sqlQuery(myDBConnection, myCode))
View(myData)
페이스트() 및 GSUB는() 함수는 (주 readlines 메쏘드에 추가 된) \의 t처럼 물건을 없애 (탭) 내 여러 줄을 저장할 SQL 쿼리를 하나의 문자열로 변환합니다. 내가 그 문제를 일으키는 생각하지 않는다, 나는 MSSQL 서버에 직접 다시로 myscripf의 결과를 붙여 넣기하고 TestQuery.sql
로 정확한 같은 결과나는 RODBC 패키지를 사용하고 있습니다를 반환 것을 확인했습니다 내 R과 SQL을 연결하십시오. 이 문제가없는 최신 패키지가 있으면 올바른 패키지인지 확인해야합니다. 내가 좋아하는 작은 테스트 쿼리 뭔가를 실행 해요 경우
data.frame(sqlQuery(myDBConnection, "select top 10 CustomerID from CustList
order by CustomerID"))
난 단지 다른 사람들이 올바른에서 온 CustomerIDs의 일부에 문제가 있습니다.
재미있는 사실 : 동료가 내 SQL 쿼리를 실행하여 SAS 데이터 세트를 만든 다음 SAS에서 데이터 세트로 SAS에 데이터 세트를로드하고 위에서 언급 한 문제가 없었습니다 (그는 SAS 데이터 세트를 읽기 위해 R의 Haven 라이브러리를 사용했습니다.)
업데이트 : 먼저 문자 유형의 빈 데이터 프레임을 초기화하고 stringsAsFactors = FALSE를 사용하여 한 번에 하나씩 각 CustomerID를로드하려고 시도했습니다. 아래 코드 :
foo = sqlQuery(myDBConnection, "select top 10 CustomerID from CustList
order by CustomerID", stringsAsFactors = FALSE)
testDF = data.frame(CustomerID = character(), stringsAsFactors = FALSE)
for(i in 1:10)
{
testDF[i,1] = foo[i,1]
}
View(testDF)
그러나, CustomerIDs 10의 8 변화에 와서는, 변경 두가 마지막에 한에 의해 변경된다. 나는 그 시리즈의 다음 버전이 이전 버전에서 단 하나 떨어져 있다는 사실과 관련이 있다고 생각합니다. 즉, xxxx100이고 xxxx100이고 xxxx100은 두 번 인쇄됩니다. 참고 : 각 CustomerID는 고유하므로 원래 데이터 세트에서는 발생하지 않고 확인되었습니다.
'foo'에 데이터를 처음로드하는 대신 sqlQuery()를 호출하고 싶지만 sqlQuery 함수에 반복 변수를 배치 할 수 없습니다. 아무도 모른다면, 크게 감사하겠습니다.당신은 단순히 2 개 개의 다른 기록을지고 같은 SQL Server 버전 2016 인 경우
근본적으로 다른 데이터 유형을 사용하는 두 시스템간에 데이터 유형이 다를 수 있습니다. 그러나 나는 R을 임의적으로 바꾸는 것에 대해 들어 본 적이 없으며, 수년 동안 계속 해왔다. 결코 그런 일이 없었다. 매우 특이한 ...'RODBC' 비 네트와 같은 내장 데이터 세트에 대한'RODBC' 질의를 사용하여 재현 가능한 예제를 제공 할 수 있습니까? SQL 데이터의 –
은 고객 '2724'' 2.84 ... 6575'의 데이터 값입니까? 아니면 완전히 다른 것입니까? – Chris
Re : @Chris CustomerID는 x0101 (잘 렸음)이고 값은 2.84 .. (잘 렸습니다). (잘 렸습니다) 7366 –