考虑一下:
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
这将停止循环,所以我的问题是,是否有其他方法可以为数据框中的列分配值,而在数据框为空时不会返回错误?
答案 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)