我有一个数据集,每个主题有多个条目,我想为每个主题创建一行,并在方括号中输入变量。我尝试使用group-by
函数,但最后为每个主题的一行都使用了相同的变量值(所有主题仅使用了主题1的值)。
代码:
mh <- data %>%
group_by(data$Subject) %>%
summarise(path = paste(data$y, sep = ",", collapse = ","),
days = paste(data$z, sep = ",", collapse = ","))
现在,我正在使用一个for循环将数据组织成这种格式: 主题1 [a b c] [2 5 7];每行一个主题
当前格式为:
Subject y z
1 a 2
1 b 5
1 c 7
2 c 5
2 a 10
2 b 12
3 b 4
3 a 9
3 c 14
for循环代码:
for(i in 1:3){
print(cat("Subject",i,"["))
{ append(data$Subject[i], data$y)
print(cat("] ["))
}
{ append(data$Subject[i], data$z)
print(cat("]\n"))
}
}
我假设我错过了代码中的某些内容,但是我的数据设置是否也可能有问题,也许是数据类型? 还有我找不到的另一个功能吗?
答案 0 :(得分:0)
您的分组和总结已经正确。这里有一些提示:
paste
和paste0
,尤其是sep
选项(用于分隔多个参数,例如paste('a', 'b', sep = ",")
)和collapse
选项之间的区别(用于分隔单个参数的元素,例如paste(c(1,2,3), collapse = ",")
)。[2 4 5]
之类的格式,但是我只会使用JSON,就像打包jsonlite
一样。Map
时;那么您可以编写一个不错的“主题打印机”功能,并使用它在您的数据框上进行映射;这样会更容易阅读和维护。这是我的操作方式(我将代码保持在原始代码的附近):
library(dplyr)
data <- data.frame(
Subject = c(1,1,1,2,2,2,3,3,3),
y = c('a', 'b', 'c', 'c', 'a', 'b', 'b', 'a', 'c'),
z = c(2,5,7,5,10,12,4,9,14)
)
mh <- data %>%
group_by(Subject) %>%
summarise(
path = paste0("[", paste(y, collapse = " "), "]"),
days = paste0("[", paste(z, collapse = " "), "]")
)
for (i in 1:nrow(mh)) {
print(paste(
"Subject",
mh$Subject[i],
mh$path[i],
mh$days[i]
))
}