我问了一个问题here。我在这里进行后续操作,因为它可能作为一个独立的问题很有用。我有以下最小示例R
代码:
Name <- c("John", "Jane", "Arthur", "Maggie","Harry", "Will")
Age <- c(20, 30, 31, 33, 30, 20)
City <- c("London", "Paris", "New York", "Delhi", "London", "Paris")
main_df <- data.frame(Name, Age, City)
split_df <- split(main_df, City)
在真实数据中,我需要在一列中对文本进行很多复杂的regex
操作,但是该操作根据split()
函数产生的列表元素的不同而不同。因此,在此示例中,每个regex
中的所有元素都需要相同的City
操作。
我熟悉数据框架,所以我的问题是如何将列表的每个元素转换为数据框架以进行单独操作,然后再次组合。优选地,以分类的名称命名的每个数据帧用于例如分割。在我的示例中为City
。
欢迎其他任何想法。我注意到通常不建议拆分为单独的数据帧!
答案 0 :(得分:1)
data.frame
:> lapply(split_df, class)
$Delhi
[1] "data.frame"
$London
[1] "data.frame"
$`New York`
[1] "data.frame"
$Paris
[1] "data.frame"
lapply()
根据条件将函数应用于data.frame
的子集这是一个愚蠢的功能,它添加了一个基于城市名称命名的新列:
my_fun <- function(x){
if(as.character(unique(x$City)) == "Paris"){
x$woo = "yay"
}
if(as.character(unique(x$City)) == "New York"){
x$woo = "woo"
}
if(as.character(unique(x$City)) == "London"){
x$woo = "yippee"
}
if(as.character(unique(x$City)) == "Delhi"){
x$woo = "alrightttt"
}
return(x)
}
> split_df <- lapply(split_df, my_fun)
> split_df
$Delhi
Name Age City woo
4 Maggie 33 Delhi alrightttt
$London
Name Age City woo
1 John 20 London yippee
5 Harry 30 London yippee
$`New York`
Name Age City woo
3 Arthur 31 New York woo
$Paris
Name Age City woo
2 Jane 30 Paris yay
6 Will 20 Paris yay
> split_df <- lapply(split_df, function(x){x$yay = "yay"; return(x)})
> split_df
$Delhi
Name Age City yay
4 Maggie 33 Delhi yay
$London
Name Age City yay
1 John 20 London yay
5 Harry 30 London yay
$`New York`
Name Age City yay
3 Arthur 31 New York yay
$Paris
Name Age City yay
2 Jane 30 Paris yay
6 Will 20 Paris yay
do.call()
和rbind.data.frame()
将您的data.frame
列表绑定到一个data.frame
> do.call(rbind.data.frame, split_df)
Name Age City woo
Delhi Maggie 33 Delhi alrightttt
London.1 John 20 London yippee
London.5 Harry 30 London yippee
New York Arthur 31 New York woo
Paris.2 Jane 30 Paris yay
Paris.6 Will 20 Paris yay