我具有以下功能,可以将其复制到一段代码中,但它并未直接在数据帧上运行。我现在需要简单地对有轻微变化的数据帧运行它,但不能找出正确的语法这样做的。
函数很简单:function(x) ifelse(x>0, paste0("+", x), x)
更改是,我想在第一列以外的所有列上运行它。因此,在第一列之后,此函数应遍历数据帧中的所有单元格,并在+
符号前添加任何正值。
我想在数据帧df
上运行修改后的函数。有没有办法内联?
样本数据一起玩:
structure(list(data_2018 = c(3.2, 3, 3.2), data_2017 = c(2.825,
0, -0.425), pilot = c(0.51578947368421, -0.0526315789473699,
0.41052631578947), all = c(0.42222222222222, -0.18518518518519,
0.27407407407407), general = c(0.40833333333333, -0.0833333333333299,
0.36666666666667)), class = "data.frame", row.names = c(NA, -3L
))
答案 0 :(得分:1)
似乎在第一列中丢失了结尾的零,但这在将示例数据视为df
时有效:
df2 <- as.data.frame(apply(df, 2, function(x) if_else(substr(as.character(x), 1, 1) == "-" | as.character(x) == "0",
as.character(x),
paste0("+", as.character(x)))))
我采用了另一种方法-我寻找负号或零作为字符,然后从那里添加+。
更新-以下带有dplyr
library(dplyr)
df2 <- df %>%
mutate_all(as.character) %>%
apply(2, function(x) if_else(substr(x, 1, 1) == "-" | x == "0",
x,
paste0("+", x))) %>%
as.data.frame()
答案 1 :(得分:0)
您可以使用几种方法:
daf[, 2:5] <- lapply(daf[, 2:5], fu)
#library(dplyr)
mutate_at(daf, vars(data_2017:general), fu)
#library(data.table)
dat <- data.table(daf)
dat[,
(colnames(dat)[-1]) := lapply(.SD, fu),
.SDcols = -1
]
daf <- structure(
list(data_2018 = c(3.2, 3, 3.2),
data_2017 = c(2.825, 0, -0.425),
pilot = c(0.51578947368421, -0.0526315789473699, 0.41052631578947),
all = c(0.42222222222222, -0.18518518518519, 0.27407407407407),
general = c(0.40833333333333, -0.0833333333333299, 0.36666666666667)
),
class = "data.frame", row.names = c(NA, -3L)
)
fu <- function(x) ifelse(x>0, paste0("+", x), x)
data_2018 data_2017 pilot all general
1 3.2 +2.825 +0.51578947368421 +0.42222222222222 +0.40833333333333
2 3.0 0 -0.0526315789473699 -0.18518518518519 -0.0833333333333299
3 3.2 -0.425 +0.41052631578947 +0.27407407407407 +0.36666666666667
仅针对lapply
呼叫显示输出