我正在使用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来解决这个问题,但我想更好地理解为什么会发生这种情况
答案 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"
上的额外空格。