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