R 获取字符向量的每个级别的因子
给定以下数据集:R 获取字符向量的每个级别的因子,r,R,给定以下数据集: Ind <- c(rep("deima1",5), rep("deima2", 5), rep("eryt1", 5), rep("eryt2",5)) Sp <- c(rep("P. deimaticus",10), rep("P. erythros", 10)) Groups <- data.frame(Ind, Sp) [1]“红蜘蛛”红蜘蛛“红蜘蛛” 这个问题在我看来很简单,但是我想不出有什么函数可以解决这个问题。我尝试了几种不同的循环方式,但似
Ind <- c(rep("deima1",5), rep("deima2", 5), rep("eryt1", 5), rep("eryt2",5))
Sp <- c(rep("P. deimaticus",10), rep("P. erythros", 10))
Groups <- data.frame(Ind, Sp)
[1]“红蜘蛛”红蜘蛛“红蜘蛛”
这个问题在我看来很简单,但是我想不出有什么函数可以解决这个问题。我尝试了几种不同的循环方式,但似乎缺少了一些东西 您可以使用
rep
Ind <- c(rep("deima1",5), rep("deima2", 5), rep("eryt1", 5), rep("eryt2",5))
Sp <- c(rep("P. deimaticus",10), rep("P. erythros", 10))
Groups <- data.frame(Ind, Sp)
Grp_sp <- levels(Groups$Sp)
rep(Grp_sp, length.out = length(levels(Groups$Ind)) )
这就是你想要的吗
lapply(split(Groups, Groups$Ind), function(x) unique(as.character(x[["Sp"]])))
$deima1
[1] "P. deimaticus"
$deima2
[1] "P. deimaticus"
$eryt1
[1] "P. erythros"
$eryt2
[1] "P. erythros"
或者,您可能希望将信息存储在数据帧中
dt <- as.data.frame(table(Groups))
# Subset the data for Freq > 0
subset(dt, Freq > 0)
Ind Sp Freq
1 deima1 P. deimaticus 5
2 deima2 P. deimaticus 5
7 eryt1 P. erythros 5
8 eryt2 P. erythros 5
dt0
子集(dt,频率>0)
Ind Sp Freq
1 deima1 deimaticus P.deimaticus 5
2 deima2 deimaticus P.deimaticus 5
7.红细胞1.红细胞5
8红细胞2 P.红细胞5
我不确定我是否正确理解了您的问题,您只想将Sp的级别存储在列表中?不太清楚。我想要一个问题的答案列表:每个个体(Ind
)属于哪个物种(Sp
)?因此,我最终会得到一个具有相同长度的级别(Groups$Ind)
,但具有物种名称而不是个体名称的列表。这绝对是正确的方向!有什么方法可以将这些结果存储为字符向量吗?@PedroRocha您可以将lappy
替换为sapply
。但是,如果有多个物种名称与一个Ind
关联,您仍然需要使用列表来存储信息。@PedroRocha请查看我的更新。这可能不是您想要的,但我认为将此类信息存储在数据框中很有用。将数据列成表格就可以了!谢谢!此解决方案仅适用于我提供的示例。我正在寻找一个解决方案,可以在任何给定的数据集上工作
dt <- as.data.frame(table(Groups))
# Subset the data for Freq > 0
subset(dt, Freq > 0)
Ind Sp Freq
1 deima1 P. deimaticus 5
2 deima2 P. deimaticus 5
7 eryt1 P. erythros 5
8 eryt2 P. erythros 5