假设我想使用-
在data.frame datasets::cars
的两列中的所有值之前添加减号apply
:
> apply(cars[1:5,], 2, paste0, "-")
speed dist
[1,] "4-" "2-"
[2,] "4-" "10-"
[3,] "7-" "4-"
[4,] "7-" "22-"
[5,] "8-" "16-"
请注意,这里的减号是后面的不在前面的数字。因此,我想出了以下给出所需输出的内容:
> apply(cars[1:5,], 2, function(x) paste0("-", x))
speed dist
[1,] "-4" "-2"
[2,] "-4" "-10"
[3,] "-7" "-4"
[4,] "-7" "-22"
[5,] "-8" "-16"
但是,这让我感到困惑:是否有一种方法可以直接指定paste
函数中负号的位置,或者相反地指定边距值的位置?
答案 0 :(得分:3)
paste0
的语法为paste0(..., collapse = NULL)
。也就是说,它按照参数出现的顺序并将其粘贴在一起。 apply
的语法为apply(X, MARGIN, FUN, ...)
,其中...
代表其他参数,这些参数在位置2、3上的paste0
的子集元素之后传递给X
等等。由于apply始终x
始终排在第一位,因此无法避免匿名功能。
即参数必须为FUN = function(x) paste0("-", x)
才能强制paste0
将“-”放在第一位。
答案 1 :(得分:1)
您可以尝试使用一些正则表达式
> sapply(cars[1:5,], function(x) sub("(.*)", "-\\1", x)) # infront
speed dist
[1,] "-4" "-2"
[2,] "-4" "-10"
[3,] "-7" "-4"
[4,] "-7" "-22"
[5,] "-8" "-16"
> sapply(cars[1:5,], function(x) sub("(.*)", "\\1-", x)) # behind
speed dist
[1,] "4-" "2-"
[2,] "4-" "10-"
[3,] "7-" "4-"
[4,] "7-" "22-"
[5,] "8-" "16-"
> sapply(cars[1:5,], function(x) sub("(.{1})(.*)", "\\1-\\2", x)) # between
speed dist
[1,] "4-" "2-"
[2,] "4-" "1-0"
[3,] "7-" "4-"
[4,] "7-" "2-2"
[5,] "8-" "1-6"