![](/img/trans.png)
[英]Delete rows from a data frame in R based on column values in another data frame
[英]R code to iteratively and randomly delete entire rows from a data frame based on a column value, and saving as a new data frame each time
如果之前有人问过这个问题,请原谅我!
所以我有一个 dataframe (df) 从不同人群中采样的个体,每个个体都给出了一个人群名称和分配给该人群的相应编号,如下所示:
Individual Population Popnum
ALM16-014 AimeesMdw 1
ALM16-024 AimeesMdw 1
ALM16-026 AimeesMdw 1
ALM16-003 AMKRanch 2
ALM16-022 AMKRanch 2
ALM16-075 BearPawLake 3
ALM16-076 BearPawLake 3
ALM16-089 BearPawLake 3
此文件中共有 12 个命名种群(它们的个体数量不同),Popnum 为 1-12。 我需要做的是从 dataframe 中随机删除一个或多个种群(最好使用“Popnum”列)并重复此 100 次,然后将每个结果保存为单独的 dataframe(即 df1、df2、df3 等) 最终结果是 100 个 dfs,每个 dfs 随机删除一个总体。 下一步是重复此操作 100 次,删除两个随机群体,然后是 3 个随机群体,依此类推。
任何帮助将不胜感激!!
您可以编写一个 function ,它将 dataframe 作为输入和n
即要删除的Popnum
数量。
remove_n_Popnum <- function(data, n) {
subset(data, !Popnum %in% sample(unique(Popnum), n))
}
要获得一个popnum
,您可以执行以下操作:
remove_n_Popnum(df, 1)
# Individual Population Popnum
#1 ALM16-014 AimeesMdw 1
#2 ALM16-024 AimeesMdw 1
#3 ALM16-026 AimeesMdw 1
#4 ALM16-003 AMKRanch 2
#5 ALM16-022 AMKRanch 2
要执行此操作 100 次,您可以使用replicate
list_data <- replicate(100, remove_n_Popnum(df1, 1), simplify = FALSE)
要在remove_n_Popnum
function 中传递不同的n
,您可以使用lapply
nested_list_data <- lapply(seq_along(unique(df$Popnum)[-1]),
function(x) replicate(100, remove_n_Popnum(df, x), simplify = FALSE))
其中seq_along
生成的序列比唯一值的数量少 1。
seq_along(unique(df$Popnum)[-1])
#[1] 1 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.