我有一个看起来像这样的数据帧:
df1 <- data.frame(study_unit=c("region", "unit1", "unit2", "unit3",
"region", "unit1", "unit2", "unit3",
"region", "unit1", "unit2", "unit3",
"region", "unit1", "unit2", "unit3"),
crop =c("crop_a", runif(3), "crop_b", runif(3), "crop_c", runif(3), "crop_d", runif(3)),
crop =c("crop_e", runif(3), "crop_f", runif(3), "crop_g", runif(3), "crop_h", runif(3)))
我希望每次字符串"时都将其拆分为四个dfs;区域";出现在"study_unit"列中,所以我得到了四个如下的dfs:
df_out <- data.frame(region=c("unit1", "unit2", "unit3"),
crop_a =c(runif(3)),
crop_b =c(runif(3)))
您可以看到,在输出df中,字符串"crop_ a";以及";crop_ b";与study_unit列中的模式字符串('region'(在同一行的,现在成为新的列名。
在输出dfs的其余部分中,列名应该是沿着与"区域"相同的行的其余作物(例如,"crop_c"、"crop_d"等(
我看到了这个答案,但当我应用它时,我只得到了起始df的第一部分。
谢谢!
一种可能的解决方案:
split(df1, data.table::rowid(df1$study_unit)) |>
lapply(function(x) setNames(x[-1,], x[1,]))
$`1`
region crop_a crop_e
2 unit1 0.336660649860278 0.398569785058498
3 unit2 0.0362093998119235 0.573208080604672
4 unit3 0.659518777159974 0.338130323216319
$`2`
region crop_b crop_f
6 unit1 0.872199683217332 0.722637160448357
7 unit2 0.877097567077726 0.00604676897637546
8 unit3 0.557809905614704 0.373338773846626
$`3`
region crop_c crop_g
10 unit1 0.581033685943112 0.330996712902561
11 unit2 0.596002857433632 0.779606226831675
12 unit3 0.257464403286576 0.785003271419555
$`4`
region crop_d crop_h
14 unit1 0.979528269963339 0.578764414880425
15 unit2 0.0909065206069499 0.910437691491097
16 unit3 0.751167086185887 0.802771017653868
- 答案在您的链接中,并进行了一些修改,请尝试
df1$a <- cumsum(df1$study_unit == "region")
lst <- split(df1 , df1$a)
lst <- lapply(lst , (x) x[1:(ncol(df1)-1)])
- 输出
$`1`
study_unit crop crop.1
1 region crop_a crop_e
2 unit1 0.21158261061646 0.917511875275522
3 unit2 0.0954579361714423 0.348413035506383
4 unit3 0.676665626699105 0.035933832405135
$`2`
study_unit crop crop.1
5 region crop_b crop_f
6 unit1 0.790641463594511 0.416468323208392
7 unit2 0.0656406560447067 0.813903928967193
8 unit3 0.285435270983726 0.308628747938201
$`3`
study_unit crop crop.1
9 region crop_c crop_g
10 unit1 0.981320110615343 0.172960462747142
11 unit2 0.653848740737885 0.484351075254381
12 unit3 0.266641739755869 0.468319382052869
$`4`
study_unit crop crop.1
13 region crop_d crop_h
14 unit1 0.863889734493569 0.604068135842681
15 unit2 0.760722446488217 0.0434220493771136
16 unit3 0.37153629004024 0.722147275693715