簡體   English   中英

R - 數據框列表 - 如何添加列

[英]R - list of dataframes - how to add columns

我有一個數據框列表(my.list)

d1 <- data.frame(ref = c(1, 2, 3), y2 = c(4, 5, 6), y3 = c(7, 8, 9), y4 = c(10, 11, 12))
d2 <- data.frame(ref = c(3, 2, 1), y2 = c(6, 5, 4), y3 = c(9, 8, 1))
my.list <- list(d1, d2)

d1
    ref y2 y3 y4
  1   1  4  7 10
  2   2  5  8 11
  3   3  6  9 12

現在我想向此列表中的每個數據幀添加一些具有絕對差異值的列。 我將使用以下 for 循環為數據幀 d1 執行此操作

for (i in names(d1)[2:length(names(d1))]){
   d1[[paste(i, 'abs_diff', sep="_")]] <- abs(d1[,i]-d1[,2])
}

d1 然后看起來像這樣:

    ref y2 y3 y4 y2_abs_diff y3_abs_diff y4_abs_diff
  1   1  4  7 10           0           3           6
  2   2  5  8 11           0           3           6
  3   3  6  9 12           0           3           6

但是,我現在如何為 my.list 的所有數據幀一次性完成此操作? 我知道我應該為此使用“lapply”,但我無法讓它工作。

Wee 可以使用lapply循環遍歷list並通過賦值創建新列

my.list1 <- lapply(my.list, function(x) {
    x[paste0(names(x)[2:length(x)], "abs_diff")] <- abs(x[-1] - x[,2])
    x
 })
my.list1
#[[1]]
#  ref y2 y3 y4 y2abs_diff y3abs_diff y4abs_diff
#1   1  4  7 10          0          3          6
#2   2  5  8 11          0          3          6
#3   3  6  9 12          0          3          6

#[[2]]
#  ref y2 y3 y2abs_diff y3abs_diff
#1   3  6  9          0          3
#2   2  5  8          0          3
#3   1  4  1          0          3

注意:當只有一列要取差值時,由於回收,它將回收值以在每一列中執行操作。 否則,我們可以通過復制列或循環來使維度相同(如 OP 的帖子中所示)

暫無
暫無

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

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