是否有一个R函数可以在某个字符串之后移动数据?
我试图将数据移动到数据中某些点之后的新列。我的数据分布在多个数据帧中,这些数据帧只有一些共同的元素,因此我希望能够创建一个循环来清理数据集。我正在寻找一个函数,在第一次出现某些文本后,例如“Total”,在一行中,下面的所有数据都会移动到一个新的列中 第一 第二 第三 一个 1. 一个 1. 全部的 2. 两个 2. 两个 2. 全部的 2.是否有一个R函数可以在某个字符串之后移动数据?,r,data-cleaning,R,Data Cleaning,我试图将数据移动到数据中某些点之后的新列。我的数据分布在多个数据帧中,这些数据帧只有一些共同的元素,因此我希望能够创建一个循环来清理数据集。我正在寻找一个函数,在第一次出现某些文本后,例如“Total”,在一行中,下面的所有数据都会移动到一个新的列中 第一 第二 第三 一个 1. 一个 1. 全部的 2. 两个 2. 两个 2. 全部的 2. 个人意见cbind如果行数太多,则在更宽的范围内保存数据会太麻烦。仍然可以像这样将数据分成不同的组 df <- read.table(text =
个人意见
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
这是另一种尝试
库(dplyr,warn.conflicts=FALSE)
图书馆(tidyr)
图书馆(purrr)
数据%
突变(总组=如果其他(第一个=“总”,总组-1L,总组))%>%
#将df拆分为多个df并绑定COL
组分割(总组,.keep=FALSE)%>%
bind_cols()
#>新名称:
#>*第一->第一…1
#>*第二->第二…2
#>*第一->第一…3
#>*秒->秒…4
新数据
#>#tibble:3 x 4
#>第一…1秒…2秒…3秒…4
#>
#>一一二二
#>二一一二二
#>3总计2总计2
#如果你只有两个小组,这可以工作-否则需要更多
#研究方法。希望这能为您提供足够的提示,以便进一步发展
名称(新数据)#一个tible:3 x 4
#>左中右四
#>
#>一一二二
#>二一一二二
#>3总计2总计2
>(V1.0.0)
在2021-04-04创建,请添加一个可重复的例子来解释您的需求。请考虑创建一个最小的可重复的示例,这样您就可以更快地得到更多的答案。嗨,谢谢你的编辑。还请包括手动计算/写入的所需输出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