r-在某一行字符串上将数据帧拆分为多个数据帧



我有一个看起来像这样的数据帧:

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

最新更新