r应用函数填充空格以匹配字符长度
我使用apply从数据帧生成字符串 例如:r应用函数填充空格以匹配字符长度,r,dataframe,whitespace,apply,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'])) 然而,如果我有 df <- data.frame(a=c(1:3), b=c(9:11), c=c("1", "2", "3")) 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']))
然而,如果我有
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']))
有人能解释一下为什么在第二种情况下,我会得到一个填充空间,使所有的字符串长度相同吗?我可以使用gsub解决这个问题,但我想更好地理解为什么会发生这种情况,因为
apply
在矩阵中转换数据。frame
。查看强制df
到矩阵时发生的情况:
as.matrix(df)
a b c
[1,] "1" " 9" "1"
[2,] "2" "10" "2"
[3,] "3" "11" "3"
请注意,它强制转换为字符矩阵,并且在“9”
上包含了额外的空间 您不需要应用功能:
paste0("hello", df[["a"]])
[1] "hello1" "hello2" "hello3"
paste0("hello", df[["b"]])
[1] "hello9" "hello10" "hello11"
看看as.matrix(df)
做了什么(apply
使用as.matrix
)-=>用apply(do.call(cbind,df),1,function(row){(str(row['b']);paste0(“hello”,row['b'])来修复问题。
这不正是评论所说的吗?@hrbrmstr我开始写答案时没有任何评论。
as.matrix(df)
a b c
[1,] "1" " 9" "1"
[2,] "2" "10" "2"
[3,] "3" "11" "3"
paste0("hello", df[["a"]])
[1] "hello1" "hello2" "hello3"
paste0("hello", df[["b"]])
[1] "hello9" "hello10" "hello11"