我有一个问题,使用mutate{dplyr}
函数的目的是添加一个新的列到数据框架。我想要一个新的列是字符类型的,并由其他列(也是字符类型)中排序的单词组成。例如,对于以下数据帧:
> library(datasets)
> states.df <- data.frame(name = as.character(state.name),
+ region = as.character(state.region),
+ division = as.character(state.division))
>
> head(states.df, 3)
name region division
1 Alabama South East South Central
2 Alaska West Pacific
3 Arizona West Mountain
我想获得一个包含以下第一个元素的新专栏:
"Alamaba_East South Central_South"
我试过这个:
mutate(states.df,
concated_column = paste0(sort(name, region, division), collapse="_"))
但是我收到了一个错误:
Error in sort(1:50, c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, :
'decreasing' must be a length-1 logical vector.
Did you intend to set 'partial'?
提前感谢您的帮助!
发布于 2014-02-13 19:15:01
您需要使用sep =
而不是collapse =
,为什么要使用sort
?而且我用的是paste
而不是paste0
。
library(dplyr)
states.df <- data.frame(name = as.character(state.name),
region = as.character(state.region),
division = as.character(state.division))
res = mutate(states.df,
concated_column = paste(name, region, division, sep = '_'))
就排序而言,您没有正确使用sort
。也许你想要:
as.data.frame(lapply(states.df, sort))
这将对每一列进行排序,并使用这些列创建一个新的data.frame
。
发布于 2016-09-29 22:33:02
对保罗的回答进行补充。如果您想对行进行排序,可以尝试使用order。下面是一个示例:
res1 <- mutate(states.df,
concated_column = apply(states.df[order(name, region, division), ], 1,
function(x) paste0(x, collapse = "_")))
在这里,order按名称对data.frame states.df进行排序,然后按区域和分区打破平局
https://stackoverflow.com/questions/21752425
复制相似问题