r应用功能垫空格以匹配字符长度

时间:2015-07-08 19:33:30

标签: r dataframe whitespace apply

我正在使用apply从数据框生成字符串。

例如:

df2 <- data.frame(a=c(1:3), b=c(9:11))
apply(df2, 1, function(row) paste0("hello", row['a']))
apply(df2, 1, function(row) paste0("hello", row['b']))

按照我的预期工作并生成

[1] "hello1" "hello2" "hello3"
[1] "hello9" "hello10" "hello11"

但是,如果我有

df <- data.frame(a=c(1:3), b=c(9:11), c=c("1", "2", "3"))
apply(df, 1, function(row) paste0("hello", row['a']))
apply(df, 1, function(row) paste0("hello", row['b']))

输出

[1] "hello1" "hello2" "hello3"
[1] "hello 9" "hello10" "hello11"

任何人都可以解释为什么我得到一个填充空间,使第二种情况下所有字符串的长度相同?我可以使用gsub来解决这个问题,但我想更好地理解为什么会发生这种情况

2 个答案:

答案 0 :(得分:1)

您不需要申请功能:

 paste0("hello", df[["a"]])
[1] "hello1" "hello2" "hello3"

paste0("hello", df[["b"]])
[1] "hello9"  "hello10" "hello11"

答案 1 :(得分:0)

这种情况正在发生,因为apply会在data.frame中转换您的matrix。看看当你强制df到矩阵时会发生什么:

 as.matrix(df)
     a   b    c  
[1,] "1" " 9" "1"
[2,] "2" "10" "2"
[3,] "3" "11" "3"

请注意,它强制转换为字符矩阵,并且它包含" 9"上的额外空格。