R에는 i 데이터 프레임 목록이 있습니다. 각 데이터 프레임의 j 개 열에 대해 100에서 100보다 큰 값을 다시 코딩하고 싶습니다. 루프에서이 작업을 수행 할 수 있지만 적용 함수 중 하나를 사용하여이 작업을 수행하는 방법을 잃어 버렸습니다.
모의 데이터와 루프 :
a <- data.frame(letters[11:20],floor(runif(10, min = 10, max = 200)),floor(runif(10, min = 10, max = 200)),letters[1:10])
b <- data.frame(letters[11:20],floor(runif(10, min = 10, max = 200)),floor(runif(10, min = 10, max = 200)),letters[15:24])
d <- list(a,b)
for(i in 1:2){
for(j in 2:3) {
d[[i]][j] <- ifelse(d[[i]][,j] > 100, 100, d[[i]][,j])
d}
}
lapply (및 Map)를 사용 하여이 작업을 수행하기 위해 시도한 것.
다음은 작동하지만 두 개 이상의 열을 다시 코딩해야하므로 고통 스러울 것입니다.
e <- lapply(d, function(x) {
x[,2] <- ifelse(x[,2] > 100, 100, x[,2])
x[,3] <- ifelse(x[,3] > 100, 100, x[,3])
x})
나는 여기에 주어진 조언을 따르려고 노력했다 : http://adv-r.had.co.nz/Functionals.html
j <- 2:3
e <- Map(function(x,y) {
x[,y] <- ifelse(x[,y] > 100, 100, x[,y])
x},d,j)
d [[1]]의 col 3이 수정되지 않았기 때문에 이것은 옳지 않습니다. d [[2]]의 col 2와 동일
다음 시도 :
i <- 1:2
j <- 2:3
e <- Map(function(x,y,z) {
x[[y]][,z] <- ifelse(x[[y]][,z] > 100, 100, x[[y]][,z])
x},d,i,j)
오류가 [.default
(X [Y], z) : 치수의 수가 잘못
여기에서 잘못된 치수 오류가 발생하는 이유를 이해할 수 없습니다. 나는 분명히 뭔가를 놓치고 있지만 나에게는 다음과 같은 것 같습니다.
x[[y]][,z] <- ifelse(x[[y]][,z] > 100, 100, x[[y]][,z])
와 같다:
x[,y] <- ifelse(x[,y] > 100, 100, x[,y])
오류를 생성하지 않은 이전 코드 블록에서.
내 문제는 apply 제품군에 대한 불완전한 이해에서 비롯된 것이라고 생각합니다.
어떤 종류의 도움을 주시면 대단히 감사하겠습니다. 감사!
이것은 당신이 원하는 것을 달성하는 것 같습니다
lapply(d, function(x){x[2:3][x[2:3]>100] <-100;x})
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다