我的数据框如下所示:
df <- data.frame(INFO=c("A;B;C", "B;A;C"), METRICS=c("1;2;3", "4;5;6"))
df
INFO METRICS
1 A;B;C 1;2;3
2 B;A;C 4;5;6
我试图使用捕获每一行的'A'值apply()
并将结果向量存储在原始数据帧的新列中:
df$M1 <- apply(
df,
1,
function(x){
info <- unlist(strsplit(x[1], ";"))
metric <- unlist(strsplit(x[2], ";"))
for(i in 1:3){
ifelse(
info[i]=="A",
metric[i],
"."
)
}
}
)
为了得到以下结果:
df
INFO METRICS M1
1 A;B;C 1;2;3 1
2 B;A;C 4;5;6 5
但是不会创建新列。
我们可以将字符串分割开";"
并用于mapply
获取METRICS
where的对应值INFO == "A"
。
df$M1 <- mapply(function(x, y) y[x == "A"], strsplit(df$INFO, ";"),
strsplit(df$METRICS, ";"))
df
# INFO METRICS M1
#1 A;B;C 1;2;3 1
#2 B;A;C 4;5;6 5
数据
确保将数据读取为字符而不是因素。
df <- data.frame(INFO=c("A;B;C", "B;A;C"), METRICS=c("1;2;3", "4;5;6"),
stringsAsFactors = FALSE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句