我有一个非常宽的数据框:> 80列。
我想聚合左侧的一些列,将paste0
应用于其他列:
prov_solicitud expediente Puntos AR16_09 BA16_09 BA11_08 BA17_09 BA22_08
Vigo BS607A 2014/1-5 65 <NA> <NA> <NA> <NA> <NA>
A Coruña BS607A 2014/10-1 42 <NA> 1 <NA> <NA> <NA>
Lugo BS607A 2014/10-2 10 <NA> <NA> - <NA> O
Lugo BS607A 2014/10-2 10 <NA> 2 <NA> <NA> <NA>
Vigo BS607A 2014/10-5 34 <NA> E <NA> <NA> <NA>
Lugo BS607A 2014/100-2 29 <NA> <NA> <NA> <NA> <NA>
dim(tbl)
> [1] 491 81
列数较少,我会用dplyr做:
(在此示例中,只有5个要粘贴的数据列)
tbl %.% group_by(prov_solicitud, expediente, Puntos) %.%
summarise(AR16_09=paste0(AR16_09), BA16_09=paste0(BA16_09),
BA11_08=paste0(BA11_08), BA17_09=paste0(BA17_09),
BA22_08=paste0(BA22_08))
如果不输入所有列名,我怎么能这样做?
可能使用by
或aggregate
以及类似prov_solicitud + expediente + Puntos ~ .
的公式。
使用as.formula
是否有用。有更简单的方法吗?
将数据列中的所有NA
转换为""
可能是必要的。
我想保留相同的列名。
答案 0 :(得分:1)
按paste0
您的意思是将值折叠为单个字符串吗?由于问题中没有样本输出,因此很难知道。如果这是你想要的:
# use a different value for collapse if you want a separator
collapse <- function(x) paste(na.omit(x), collapse = "")
tbl %>%
group_by(prov_solicitud, expediente, Puntos) %>%
summarise_each("collapse")
或者collapse
可以这样写:
collapse <- function(x) na.omit(x) %>% paste(collapse = "")
或者你想要的是:
collapse <- function(x) na.omit(x) %>% toString()