Да, вы можете разделить фрейм данных на несколько таблиц, используя split.default
. В этом случае мы можем извлечь первые два символа из имен столбцов, чтобы разделить их
split.default(df[-1], substr(names(df)[-1], 1, 2))
#$A1
# A10 A11 A12
#1 1 1 1
#2 2 2 2
#3 3 3 3
#$A2
# A20 A21 A22
#1 1 1 1
#2 2 2 2
#3 3 3 3
#$A3
# A30 A31 A32
#1 1 1 1
#2 2 2 2
#3 3 3 3
Если вы хотите добавить первый столбец в каждый список, вы можете cbind
добавить его в каждый список
lapply(split.default(df[-1], substr(names(df)[-1], 1, 2)), cbind, df[1])
EDIT
Для обновленных данных мы можем создать две группы, общие столбцы (common_cols
) и разные столбцы (diff_cols
)
common_cols <-c("ID", "W01", "W02", "W03")
diff_cols <- setdiff(names(df), common_cols)
затем делите только на diff_cols
и cbind
common_cols
для каждого списка.
lapply(split.default(df[diff_cols], substr(names(df[diff_cols]), 1, 2)),
cbind, df[common_cols])
#$BS
# BSS20 BSS40 BSS60 ID W01 W02 W03
#1 1 1 1 Apple 1 1 1
#2 2 2 2 Banana 2 2 2
#3 3 3 3 Pear 3 3 3
#$BW
# BW20 BW40 BW60 ID W01 W02 W03
#1 1 1 1 Apple 1 1 1
#2 2 2 2 Banana 2 2 2
#3 3 3 3 Pear 3 3 3
#$SS
# SS20 SS40 SS60 ID W01 W02 W03
#1 1 1 1 Apple 1 1 1
#2 2 2 2 Banana 2 2 2
#3 3 3 3 Pear 3 3 3