r - 创建新的数据框列

标签 r apply

我的数据框看起来像这样:

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/

相关文章:

r - 返回 j 中的命名列表时,data.table 中的内存泄漏缓慢(尝试 reshape data.table)

r - 在 ggplot2 条形图中对国家/地区名称进行排序

r - 如何计算所选列的行平均值

scala - 在 Scala 中应用和 lambdas

r - 计算数据帧的所有行和特定列的公式

R:如何将长数字转换为字符串以节省精度

regex - R:仅当特殊正则表达式条件不匹配时才拆分

r - 运行 R.exe 会创建临时文件吗?

python - Pandas DataFrame 将函数应用于多列并输出多列

r - 使用lapply制作表格