我的输出以以下格式:
类型名称因子1因子2
1 A 34 4 5
2 A 34 3 7
3 A 22 1 3
4 A 21 3 4
5 A 21 3 5
这是获取输出的代码:
data<-as.data.frame(rbind(c("a",34,4,5), c("a", 34, 3, 7), c("a", 22, 1, 3), c("a", 21,3,4), c("a", 21,3,5)))
names(data)<-c("type", "name", "factor1", "factor2")
我希望将上面的输出转换为每个"名称"列只有一个行的输出。这种新格式必须写入将在另一个函数(由Python(中使用的TSV文件。
类型名称因子1因子2
1 A 34 4,3 5,7
3 A 22 1 3
4 A 21 3 4,5
对不起,我不知道如何获得每行清晰显示的空间。例如,第1行在" factor1"列下的" 4,3"和factor2列下的" 5,7"。希望这可以帮助。
预先感谢您。
我们可以做
library(tidyverse)
data %>%
group_by(type, name) %>%
summarise_all(funs(toString(sort(unique(.)))))
,而不是使用summarise_all
在变量上应用多个功能,我们还可以定义自定义功能并将其传递给summarise
。请注意,当您想对变量进行复杂的操作时,这很有用。
library(dplyr)
func <- function(value){
return(paste(unique(value), collapse = ','))
}
data %>%
group_by(type, name) %>%
summarise(factor1 = func(factor1), factor2 = func(factor2))
# or use summarise_each in new dplyr verion
data %>%
group_by(type, name) %>%
summarise_each(funs(func))
这是输出:
# A tibble: 3 x 4
# Groups: type [?]
type name factor1 factor2
<fctr> <fctr> <chr> <chr>
1 a 21 3 4,5
2 a 22 1 3
3 a 34 4,3 5,7