![](/img/trans.png)
[英]Add a column to dataframes in a list based on the existence of other columns in 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.