我的数据框看起来像这样:
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
我尝试使用 apply()
捕获每行的“A”值,并将结果向量存储在原始数据帧的新列中:
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
的相应值,其中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)
关于r - 创建新的数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60151065/