데이터 프레임에서 반복되는 샘플을 이름별로 찾아서 평균을 계산하고 싶습니다. 하지만 먼저, 샘플 이름의 평등 테스트가 작동하지 않습니다 (또는 '연결', 확실하지 않습니다. print() 및 write.table을 사용한 디버깅이 도움이되지 않았기 때문입니다). 내가 도대체 뭘 잘못하고있는 겁니까?데이터 프레임의 두 열 헤더의 동등성 테스트 R
내 데이터 테이블에 20531 개의 행과 1155 개의 열이 있으므로 행당 반복되는 열의 평균을 얻고 싶습니다.
동등성 테스트를위한 내 코드 (첫 번째 열 헤더는 '유전자 ID'이므로 dfs [, 1]을 건너 뛰고 동등성 테스트 후 대상 열을 하나의 데이터 프레임에 연결하려고 시도합니다.)
dfs <- as.data.frame(dfs)
for(i in 2:ncol(dfs)) {
oneOftheSamples <- data.frame(dfs[,i])
colnames(oneOftheSamples) <- colnames(dfs)[i]
head(oneOftheSamples)
wantedcolname <- colnames(oneOftheSamples)
n <- i
for (j in n:ncol(dfs)){
foundcolname <- colnames(dfs)[j]
if((wantedcolname==foundcolname) & (j!=i)){
repOftheSample <- data.frame(dfs[,j])
colnames(repOftheSample) <- colnames(dfs)[j]
oneOftheSamples <- data.frame(oneOftheSamples,repOftheSample)
}
}
}
어떤 조언이나 의견이 유용 할 수 있습니다. 미리 감사드립니다.
미안 해요, 난 편집 할 수 있습니다 내 대답하는 수단을 원하는 같은데요합니다. 저는 R 프로그래밍에 완전히 익숙하지 않지만 C++ 경험이 적으므로 R 데이터 구조에 대해 약간의 모조처럼 보일 수 있습니다. 어쨌든, 나는 (적어도 나는 생각한다) 코드를 이해하지만, 나의 전체 스크립트와 같은 방식으로 실행했다 : "dfs.list [[x]]의 오류 : subscript가 범위를 벗어났다 전화 : sapply -> sapply -> lapply -> 재미 -> 적용 " 나는 그의 경계 밖으로 배열에 액세스하려고 생각하지 않습니다. 나는 내가 망쳐 놓은 것을 알아 내려고 노력한다. 답장을 보내 주셔서 감사합니다. – szusz
정확히 열 이름이 중복 된 것으로 생각하지 않습니다. 위의 FALSE로 replace = TRUE를 변경하면 중복이 없으며 오류를 재현 할 수 있습니다. 'read.table' 또는 이와 유사한 것으로 데이터를 읽을 때, 여러분은 콜론 이름이 중복되면'check.names = FALSE'; 그렇지 않으면, dup cols는'A, A.1, A.2' 등으로 코드화 될 것입니다. 여러분의 데이터를위한'dups' 또는'dat.list'의 길이는 얼마입니까? 그것이 0이면 문제가됩니다. 또한, 위의 데이터 프레임 크기로 실행하고, 내 노트북에 몇 초 안에 완료되므로 문제가 없어야합니다. – rawr
덕분에 많은 도움이되었습니다. read.table 대신에 read.columns를 사용했습니다. 여러 파일에서 지정된 열을 읽어야합니다.이 함수에서는 'check.names'인수를 설정할 수 없지만 이제는 코드를 다시 작성합니다. – szusz