首页 > 解决方案 > 是否有一个 R 函数可以在某个字符串之后移动数据?

问题描述

我试图在数据中的某些点之后将数据移动到新列。我的数据分布在多个只有一些共同元素的数据帧中,所以我希望能够创建一个循环来清理数据集。我正在寻找一个函数,在第一次之后有某些文本,例如“Total”,在一行中,下面的所有数据都移动到一个新的列。

第一的 第二 第三
1
1
全部的 2
2
2
全部的 2

我希望我的数据看起来与下面类似,但由于数据的可变性,我很难找到可以轻松复制的解决方案。

剩下 中央 正确的 第四
1 2
1 2
全部的 1 全部的 2

标签: rdata-cleaning

解决方案


如果行太多,更广泛的个人意见cbind数据将太麻烦。您仍然可以像这样将数据分成不同的组

df <- read.table(text = "first  second
One 1   
One 1   
Total   2   
Two 2   
Two 2   
Total   2", header = T)


df$dummy = rev(cumsum(rev(df$first == "Total")))
df
> df
  first second dummy
1   One      1     2
2   One      1     2
3 Total      2     2
4   Two      2     1
5   Two      2     1
6 Total      2     1

您可能会注意到您的数据分为两组。您仍然可以,cbind()或者bind_cols()如果您愿意,可以轻松地

df %>% group_split(d = rev(cumsum(rev(first == "Total")))) %>% bind_cols()

# A tibble: 3 x 6
  first...1 second...2 d...3 first...4 second...5 d...6
  <chr>          <int> <int> <chr>          <int> <int>
1 Two                2     1 One                1     2
2 Two                2     1 One                1     2
3 Total              2     1 Total              2     2

推荐阅读