Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r应用函数填充空格以匹配字符长度_R_Dataframe_Whitespace_Apply - Fatal编程技术网

r应用函数填充空格以匹配字符长度

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(

我使用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"