[英]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]
}
通過結合使用lapply
和ifelse
,您可以執行以下操作:
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.