我有一个数据框,其中一列包含非数字值.我需要在数值列上应用一个函数并创建新的数据框,但我希望在这个新数据框中保留包含非数值的列.

#Data frame (exemple)
df <- data.frame(col1 = c(1:5), col2 = c(6:10), col3 = c("x","y","z","w","x"))

#Function (example)
sum1 <- function(x){x + 1}

df_aplly <- as.data.frame(apply(df, MARGIN = 2, FUN = sum1))

此示例返回错误:

X+1中的错误:二元运算符的非数字参数

我试着只在数字列上应用:

#Function (exemple)
sum1 <- function(x){x + 1}

df_aplly <- as.data.frame(apply(df[1:2], MARGIN = 2, FUN = sum1))

> df_aplly
  col1 col2
1    2    7
2    3    8
3    4    9
4    5   10
5    6   11

它可以工作,但返回一个只有2列的新数据框,但我需要在这个新数据框中保持列的非数字.

有没有办法只使用‘Apply()’函数就可以做到这一点呢?

#data frame I need:
> df_aplly
  col1 col2 df$col3
1    2    7       x
2    3    8       y
3    4    9       z
4    5   10       w
5    6   11       x

推荐答案

你可以用dobur

> df %>% 
    mutate_if(is.numeric, sum1)
  col1 col2 col3
1    2    7    x
2    3    8    y
3    4    9    z
4    5   10    w
5    6   11    x

基于R

> ind <- sapply(df, is.numeric)
> as.data.frame(c(lapply(as.list(df[ind]), sum1), as.list(df[!ind])))
  col1 col2 col3
1    2    7    x
2    3    8    y
3    4    9    z
4    5   10    w
5    6   11    x

R相关问答推荐

使用预定值列表将模拟数量(n)替换为rnorm()

在数据表中呈现数学符号

查找满足SpatRaster中条件的单元格位置

无法在我的情节中表现出显着的差异

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

如何在R中正确对齐放射状图中的文本

使用R的序列覆盖

基于现有类创建类的打印方法(即,打印tibles更长时间)

根据选中三个复选框中的一个或两个来调整绘图

如何直接从Fortran到R的数组大小?

使用geom_segment()对y轴排序

绘制采样开始和采样结束之间的事件

在R函数中使用加号

按时间顺序对不同事件进行分组

如何提取R中其他字符串和数字之间的字符串?

使用ifElse语句在ggploy中设置aes y值

R:如何在数据集中使用Apply

如何创建直方图与对齐的每月箱?

使用dplyr删除具有条件的行

R中的交叉表