簡體   English   中英

r-替換列中的值

[英]r - Replace values in columns

我有一個數據框:

    V1 V2 V3 V4 V5 V6 V7
a   F  B  C  D  B  A  T
b   R  D  C  D  F  A  T
c   A  C  C  R  F  A  T

在每一行中,我都希望將與V2列匹配的V3:V7列中的值替換為V1列中的值。 它應該看起來像這樣。

   V1 V2 V3 V4 V5
a  C  D  F  A  T
b  C  R  F  A  T
c  A  R  F  A  T

我怎樣才能做到這一點?

只要您的數據是字符串而不是因素,這就應該起作用:

for(i in 3:7){
  j = data[,2]==data[,i]
  data[j,i] = data[j,1]
}

通過結合使用lapplyifelse ,您可以執行以下操作:

mydf[,3:7] <- lapply(mydf[,3:7], function(x) ifelse(x==mydf$V2, mydf$V1, x))

這使:

> mydf
  V1 V2 V3 V4 V5 V6 V7
a  F  B  C  D  F  A  T
b  R  D  C  R  F  A  T
c  A  C  A  R  F  A  T

要么:

newdf <- data.frame(sapply(mydf[,3:7], function(x) ifelse(x==mydf$V2, mydf$V1, x)))

這使:

> newdf
  V3 V4 V5 V6 V7
1  C  D  F  A  T
2  C  R  F  A  T
3  A  R  F  A  T

這是使用lapply另一種方法:

df[, 3:7] <- lapply(df[,3:7], function(i) {i[i == df$V2] <- df$V1[i == df$V2]; i})

df
  V1 V2 V3 V4 V5 V6 V7
a  F  B  C  D  F  A  T
b  R  D  C  R  F  A  T
c  A  C  A  R  F  A  T

對於每個變量,使用子集替換匹配項。

可以使用相同的方法replace功能:

df[, 3:7] <- lapply(df[,3:7],
                    function(i) replace(i, i == df$V2, df$V1[i == df$V2]))

與@ mr-rip的解決方案一樣,這些變量必須存儲為字符,而不是使其起作用的因素。

這也適用於data.table

library(data.table)
setDT(df)[, lapply(.SD, function(col) ifelse(col == V2, V1, col))][, V3:V7, with=F]
#    V3 V4 V5 V6 V7
# 1:  C  D  F  A  T
# 2:  C  R  F  A  T
# 3:  A  R  F  A  T

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM