将apply函数的结果存储在新列中

时间:2017-08-16 10:44:31

标签: r apply

我的数据

A<-c(1999,1999, 2001, 2001)
B<-c("A", "D", "A", "D")
df<-data.frame (A, B)

我正在申请

df$C<-apply(df[1], 2, function(x) ifelse(x > 2000, 2000, x))

使用基于参考列的值

创建新列

输出

     A B    C
1 1999 A 1999
2 1999 D 1999
3 2001 A 2000
4 2001 D 2000

为什么它会复制相同的colname A并且不会创建列C

1 个答案:

答案 0 :(得分:3)

对于单个列,我们不需要apply循环,可以使用

完成
 df$C  <- ifelse(df[,1] > 2000, 2000, df[,1])

在OP的代码中,输出为matrix,其中包含一列,并且列名相同,导致matrix列的dimnames为“A”

str(df)
#'data.frame':   4 obs. of  3 variables:
#$ A: num  1999 1999 2001 2001
#$ B: Factor w/ 2 levels "A","D": 1 2 1 2
#$ C: num [1:4, 1] 1999 1999 2000 2000
# ..- attr(*, "dimnames")=List of 2
#  .. ..$ : NULL
#  .. ..$ : chr "A"

因此,该列已经存在,但它是matrix

df$C
#      A
#[1,] 1999
#[2,] 1999
#[3,] 2000
#[4,] 2000

不应分配matrix,而应将其转换为vector

df$C <- as.vector(apply(df[1], 2, function(x) ifelse(x > 2000, 2000, x)))
df$C
#[1] 1999 1999 2000 2000