是否有一个R函数可以在for循环中用于将数据格式化为文本文件?

时间:2019-06-03 18:52:42

标签: r for-loop

我有一个数据集,每个主题有多个条目,我想为每个主题创建一行,并在方括号中输入变量。我尝试使用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")) 
  }
}

我假设我错过了代码中的某些内容,但是我的数据设置是否也可能有问题,也许是数据类型? 还有我找不到的另一个功能吗?

1 个答案:

答案 0 :(得分:0)

您的分组和总结已经正确。这里有一些提示:

  • 适应pastepaste0,尤其是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]
  ))
}