【发布时间】:2017-01-27 00:57:44
【问题描述】:
如何在数据框的每一列中应用一个函数?也就是说,如何修改df2 <- sapply(df1, fun) 使得df2 等于df1 但每隔一列应用一次fun?这是我尝试过的:
a <- c(1,2,3,4,5)
b <- c(6,7,8,9,10)
df1 <- data.frame(a,b)
df2 <- sapply(df1[c(TRUE, FALSE)], function(x) x^2)
isTRUE(dim(df1)==dim(df2)) # FALSE
此代码的问题在于,它删除了所有未应用 fun 的列 (dim(df2) # 5 1)。
【问题讨论】:
-
mtcars[c(FALSE, TRUE)] <- lapply(mtcars[c(FALSE, TRUE)], as.character) -
很遗憾,我没有收到您的评论。
-
@Joe - 它只是每隔一列替换一次,因为
c(FALSE,TRUE)像FALSE/TRUE/FALSE/TRUE/FALSE...一样被回收,遍历您的数据列。 -
@rawr 的答案仅替换指定的列,这意味着您不能立即将
lapply调用的输出分配给新对象。请改用df1[c(TRUE, FALSE)] <- sapply(df1[c(TRUE, FALSE)], function(x) x^2)。 -
学习永无止境。