我想知道是否有办法创建各种数据子集而不必为每个子集使用子集函数。
说我有一个看起来像这样的df:
female_ID dispersal_distance distance_bin
A1 230 500 m and below
B1 629 500 m - 1000 m
C1 888 500 m - 1000 m
D1 1236 1000 m - 1500 m
E1 1777 1500 m - 2000 m
F1 2314 2000 m - 2500 m
G1 2762 2500 m - 3000 m
现在我的很多代码都包含如下代码:
df1 <- subset(df, distance_bin == '500 m and below')
df2 <- subset(df, distance_bin == '500 m - 1000 m')
df3 <- subset(df, distance_bin == '1000 m - 1500 m')
df4 <- subset(df, distance_bin == '1500 m - 2000 m')
df5 <- subset(df, distance_bin == '2000 m - 2500 m')
df6 <- subset(df, distance_bin == '2500 m - 3000 m')
有没有办法在一行中做我上面做的事情?
由于
编辑:
根据@ A5C1D2H2I1M1N2O1R2T1和@Rui Barradas的建议,我有这个:
df_list <- split(df, df$distance_bin)
names(df_list) <- paste0("df", seq_along(df_list))
list2env(df_list, envir = .GlobalEnv)
它给了我单独的df1,df2,df3等数据帧。虽然它不是一行代码,但这仍然有用,它减少了代码行数,所以谢谢!!
答案 0 :(得分:0)
三衬垫
dd <- read.table(text = "female_ID dispersal_distance distance_bin
A1 230 500_m_and_below
B1 629 500_m_-_1000_m
C1 888 500_m_-_1000_m
D1 1236 1000_m_-_1500_m
E1 1777 1500_m_-_2000_m
F1 2314 2000_m_-_2500_m
G1 2762 2500_m_-_3000_m", header = T,stringsAsFactor = F)
Fsplit <- function(x,y){
ls <- split(x,y)
list2env(ls,envir = .GlobalEnv)
}
Fsplit(dd,dd$distance_bin)
根据组名
在您的环境中创建新的数据框