r - 将应用函数的结果存储在新列中

标签 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

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

最佳答案

我们不需要对单个列使用 apply 循环,可以通过以下方式完成

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

在OP的代码中,输出是一个具有单列的矩阵,并且它也具有相同的列名称,从而产生一个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"

所以,该列已经存在,但它是一个矩阵

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

不应分配矩阵,而应将其转换为向量

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

关于r - 将应用函数的结果存储在新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45711427/

相关文章:

r - 测量 Shiny 内部的执行速度

xml - 如何填写在线表格并在 R 中返回结果

r - 如何在 R 中获取系统(Windows)内存?

r - 使用饼图比较分类变量的聚类分布和总体分布

python - 过滤 Pandas 列中的列表元素是否相同

r - 使用 apply 或 plyr 独立地打乱矩阵的列

r - 将一堆函数应用于 R 中矩阵的列

r - ->(右箭头)和 <-(左箭头)在 for 循环中的不同行为

r - R 中 apply v. for 循环的意外行为

python - 为什么我的 Pandas 'apply' 引用多个列的函数不起作用?