将数据添加到包含0行

时间:2017-02-20 09:51:35

标签: r dataframe subset

考虑一下:

df <- data.frame(a=1:2, b=3:4)

我可以添加一个新列并为其指定值,如下所示:

df$c <- 5

但是,如果我将其子集化,那么它是一个空的data.frame并尝试为其分配任何内容,它将返回错误:

df2 <- subset(df, a==3)
df2$d <- 10
  

$&lt; - 。data.frame( tmp ,“d”,值= 10)中的错误:     替换有1行,数据有0

这将停止循环,所以我的问题是,是否有其他方法可以为数据框中的列分配值,而在数据框为空时不会返回错误?

2 个答案:

答案 0 :(得分:2)

如果OP的目的是创建一个带有附加列的空data.frame,您可以尝试:

df2$d <- integer(0)
df2
#[1] a b c d
#<0 rows> (or 0-length row.names)

但是,这也可以在data.frame的初始调用中完成:

data.frame(a = integer(0), b = integer(0), c = integer(0), d = integer(0))
#[1] a b c d
#<0 rows> (or 0-length row.names)

答案 1 :(得分:1)

您可以通过使用dplyr对data.frame进行子集化,然后使用filter添加新列,在mutate的一行中实现此目的。无论您的子集化操作(此处为filter)是否会导致数据空帧,它都不会崩溃:

library(dplyr)
df <- data.frame(a=1:2, b=3:4)
df2 <- df %>% filter(a==3) %>% mutate(d=10)
# [1] a b d
# <0 rows> (or 0-length row.names)