簡體   English   中英

R基於修改列表中的其他數據幀列來添加列

[英]R add columns based on modifying other columns of dataframes within a list

我想在包含列B第一部分的列表中向data.frames添加一個新列D.但是我不確定如何在列表中添加到列級別?

創建一些數據

df1 <- data.frame(A = "hey", B = "wass.7", C = "up")
df2 <- data.frame(A = "how", B = "are.1", C = "you")
dfList <- list(df1,df2)

期望的輸出:

# a new column removing the last part of column B

[[1]]
    A      B  C D
1 hey wass.7 up wass

[[2]]
    A     B   C D
1 how are.1 you are

對於每個數據框,我做了這個,這是有效的

df1$D<-sub('\\..*', '', df1$B)

在一個函數中我試過這個,這可能沒有正確地解決列並返回“意外的符號......”

dfList <- lapply(rapply(dfList, function(x) 
x$D<-sub('\\..*', '', x$B) how = "list"),
  as.data.frame)

lapply(rapply)部分是使用R中的數據 lapply(rapply) 列表中的使用gsub復制的

看一下這個

lapply(dfList, function(x){
   x$D <-sub('\\..*', '', x$B);
   x
 })
[[1]]
    A      B  C    D
1 hey wass.7 up wass

[[2]]
    A     B   C   D
1 how are.1 you are

rapply解決方案確實有效。 但是,在how參數之前需要一個逗號來解決錯誤。 此外,您將無法分配一個新列,只能替換現有列。 由於rapply是一個遞歸調用,它將在嵌套列表中的每個元素上運行gsub ,以便跨所有數據幀的所有列。

否則,根據@ JilberUrbina的答案使用簡單的lapply

df1 <- data.frame(A = "hey", B = "wass.7", C = "up", stringsAsFactors = F)
df2 <- data.frame(A = "how", B = "are.1", C = "you", stringsAsFactors = F)
dfList <- list(df1,df2)

dfList <- lapply(rapply(dfList, function(x) 
  sub('\\..*', '', x), how = "list"),
  as.data.frame)

dfList

# [[1]]
#     A    B  C
# 1 hey wass up

# [[2]]
#     A   B   C
# 1 how are you

暫無
暫無

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

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