【问题标题】:What to use instead of subset to get a vector result in R?在 R 中使用什么代替子集来获得向量结果?
【发布时间】:2018-03-02 11:19:50
【问题描述】:

我的问题是一个相对简单的问题,我通常会用subset 来解决。在这种情况下,我需要一个向量而不是数据框作为结果,我希望有人能提供帮助。

我有一个包含两列、物种和 ID 的数据框。

Species     ID
Species1    A01
Species1    A02
Species1    B01
Species1    B02
Species2    A03
Species2    A04
Species2    B03
Species2    B04
Species3    A05
Species3    A06
Species3    B05
Species3    B06
Species3    B07

对于每个物种,我想为该物种创建一个相关 ID 的向量。

使用子集我会这样做:

df2 <- subset(df1, Species == Species1, select = "ID")

结果是

ID
A01
A02
B01
B02

但这给了我作为数据框的结果,我希望将结果作为向量。

我一直在寻找答案,但找不到答案,而且我对 R 还很陌生 - 也许如果存在知识差距,这可以解释。

【问题讨论】:

  • unlist(subset(...))df1$ID[df1$Species=="Species1"]with(df1, ID[Species=="Species1"] 或 ...
  • 感谢@Cath 第一个给出了一个奇怪的结果 - 用 ID_1、ID_2 等命名向量中的每个值,但第二个完美。
  • 如果你只是插入as.vector()函数? df2 &lt;- as.vector(subset(df1, Species == Species1, select = "ID"))
  • 我认为这也可以,但在这种情况下不行。它仍然在带有编号行的单列中返回结果。

标签: r dataframe vector subset


【解决方案1】:

您可以使用subset 中的参数drop = TRUE 来返回一个向量。

subset(df1, Species == "Species1", select = ID, drop = TRUE)
# [1] A01 A02 B01 B02

【讨论】:

  • 完美。这是我一直在寻找的简单解决方案。谢谢。
【解决方案2】:

据我所知,这是您的 data.frame 的一个最小示例:

cat <- c("A01", "A02", "B01", "B02", "A03")
species <- c("species1", "species1", "species1", "species2", "species2")
x_name <- "species"
y_name <- "ID"
df <- data.frame(species, cat)
names(df) <- c(x_name, y_name)
df
species  ID
1 species1 A01
2 species1 A02
3 species1 B01
4 species2 B02
5 species2 A03

我要做的是按照您所说的设置子集,然后分配一个新变量,指定数据类型,然后按照 Cath 建议的方式取消列出,使用括号指定列:

df2 <- subset(df, species == "species1")
df2
species  ID
1 species1 A01
2 species1 A02
3 species1 B01

a <- as.character(unlist(df2[,2], use.names = F))
a
[1] "A01" "A02" "B01"
is.vector(a)
[1] TRUE

df3 <- subset(df, species == "species2")   
df3
species  ID
4 species2 B02
5 species2 A03 

b <- as.character(unlist(df3[,2], use.names = F))
b
[1] "B02" "A03"
is.vector(b)
[1] TRUE

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多