데이터 프레임의 대체 열 값을 0보다 작은 0으로 변경하고 싶습니다.특정 값을 갖는 데이터 프레임에서 열 추출
abc 1 ghf 3
def 3 ftr 6
scf 0.2 ugh 1
1보다 작은 두 번째 및 세 번째 열의 모든 값은 0이되어야합니다.
R에서 수행 할 수있는 방법이 있습니까?
데이터 프레임의 대체 열 값을 0보다 작은 0으로 변경하고 싶습니다.특정 값을 갖는 데이터 프레임에서 열 추출
abc 1 ghf 3
def 3 ftr 6
scf 0.2 ugh 1
1보다 작은 두 번째 및 세 번째 열의 모든 값은 0이되어야합니다.
R에서 수행 할 수있는 방법이 있습니까?
이 실제로 작동하고, 그것의 단순 개선하기 어려울 수 있습니다 :
df[ df<1 ] <- 0
다른 방법 (미만 소형) : arr.ind=TRUE
에 사용되는 행의 2 열 매트릭스를 반환하고 조건이 TRUE
인 열 [<-.data.frame
과 함께 사용할 수 있지만 숫자 인덱스로 수행해야합니다.
idxs <- which(df <1, arr.ind=TRUE)
#Warning messages:
#1: In Ops.factor(left, right) : < not meaningful for factors
#2: In Ops.factor(left, right) : < not meaningful for factors
### Perfectly safe to ignore the warning
df[ idxs[,1], idxs[,2] ] <- 0
df
#------------------
V1 V2 V3 V4
1 abc 1 ghf 3
2 def 3 ftr 6
3 scf 0 ugh 1
즉시 dput(myData)
사용할 수 있습니다, 출력이있는 변수에 할당 할 수있는 형식으로 데이터를 준 경우 도움이 될 :
> df <- structure(list(V1 = structure(1:3, .Label = c("abc", "def", "scf"
), class = "factor"), V2 = c(1, 3, 0.2), V3 = structure(c(2L, 1L,
3L), .Label = c("ftr", "ghf", "ugh"), class = "factor"), V4 = c(3L,
6L, 1L)), .Names = c("V1", "V2", "V3", "V4"), row.names = c(NA,
-3L), class = "data.frame")
> df
V1 V2 V3 V4
1 abc 1 ghf 3
2 def 3 ftr 6
3 scf 0.2 ugh 1
당신은 두 번째와 세 번째의 모든 값 "라고 열 ... "하지만 아마"두 번째 및 네 번째 ... "를 의미 할 것입니다. 더
> df$V2 <- ifelse(df$V2 < 1, 0, df$V2)
> df$V4 <- ifelse(df$V4 < 1, 0, df$V4)
> df
V1 V2 V3 V4
1 abc 1 ghf 3
2 def 3 ftr 6
3 scf 0 ugh 1
이 ?ifelse
를 볼 수 있지만, 나는이 이미 수 있도록해야한다고 생각 : 여기에 내가 무엇을 할 것이라고한다.
고마워요. 그것은 당신의 방법으로하는 것이 정말 쉬웠습니다. – user1021713