【问题标题】:In R, how to split a long column of numerical data into multiple columns based on a certain criterion?在R中,如何根据一定的标准将一长列数值数据拆分为多列?
【发布时间】:2021-09-03 07:27:57
【问题描述】:

我试图通过将每 12 个连续值(非重复)分配到一个新的(较短的)列来拆分一列数值数据。任何帮助将不胜感激。

到目前为止我尝试过:

    df_all <- rnorm(500, mean = 5, sd = 1)  # example data, I didnt use this one
    df_final <- matrix(, nrow = 12, ncol = 0)
    
    for(i in seq(1, length(df_all), 12)) {
      x <- df_all[i:i+11]
      df_final <- data.frame(cbind(df_final, x))
    }

    write.csv(df_final, file = paste0(rootdir,"/","mT",'.csv'))

它不起作用,它将段“x”的第 12 个值附加到新列的所有 12 行。我检查了 df_all[1:12] 并返回正常的正确值。

【问题讨论】:

  • 您能否提供minimum reproducible example 的数据?
  • 从技术上讲,一个带有一列数值的 csv 文件,这些值到底是什么并不重要,它可以全为 1,我只是希望它分成多列,每列都有一个最大行长12 个。
  • 如果我们想产生想法和测试解决方案,我们将使用示例数据来实现。提供这些数据而不是指望我们自己生成数据是一种很好的做法。
  • 很明显,我是新来的,在 r 中,您可以随意创建一长串数字...我不知道有什么大惊小怪的,让它对新手如此不友好跨度>
  • 你的错误是[i:(i + 11)]

标签: r dataframe data-manipulation


【解决方案1】:

你可以的

df_all |>
  matrix(nrow = 12) |>
  as.data.frame()

返回(截断):

         V1       V2       V3       V4       V5       V6       V7       V8
1  3.583938 6.071985 6.429908 4.632524 5.477596 4.548784 4.588537 5.487138
2  4.055486 5.828313 3.517980 7.242400 4.909442 6.149804 3.990672 6.752652
3  3.710380 4.001795 5.739687 3.479396 6.191938 5.578237 3.252641 6.070115
4  4.867136 5.191307 5.884153 4.647208 5.437753 3.455165 5.989859 7.442414
5  5.111246 5.882136 6.361230 5.186235 3.867077 5.631055 5.030219 4.595383
6  5.061778 5.560719 4.146807 5.341364 2.919934 3.305795 5.129994 6.159989
7  6.188377 4.606850 6.693071 6.997215 5.722066 5.307161 4.795347 5.122470
8  4.035036 4.785901 3.325937 4.907982 5.490938 6.416011 7.522089 6.845924
9  6.152382 3.506762 4.541983 4.166833 3.461948 4.155356 2.969548 4.585297
10 6.834143 5.818803 5.048908 2.944199 4.999610 4.892196 4.242976 4.337777
11 4.293846 4.744218 4.244750 4.261823 4.552857 3.965914 4.560048 4.257186
12 5.605399 6.246158 6.622988 7.637657 5.349231 4.258165 4.357449 5.635602

使用的数据:

df_all <- rnorm(500, mean = 5, sd = 1)

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 2021-09-11
    • 2017-03-29
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2016-05-02
    相关资源
    最近更新 更多