我在下面的数据
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
为什么它确实复制相同的 colnameA
并且不创建列C
?
我们不需要单列的apply
循环,它可以通过以下方式完成
df$C <- ifelse(df[,1] > 2000, 2000, df[,1])
在 OP 的代码中,输出是一个具有单列的matrix
,并且它还具有相同的列名,从而产生一个matrix
列,其暗名为 '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