考虑这个样本数据
df1<-data.frame(c(1,2,1),c(3,3,2),c(2,5,8))
df2<-data.frame("a","a","a")
我想要的结果是
> df1
1 2 3
1 a a a
2 2 3 5
3 1 2 8
但在我这样做之后:df1[1,] <- df2[1,]
> df1
1 2 3
1 1 1 1
2 2 3 5
3 1 2 8
为什么呢?我应该怎么做才能得到我想要的结果?
答案 0 :(得分:1)
数据框中的每列必须具有相同的类型。这里的关键是df2
中的值是因子,而不是字符(因为stringsAsFactors = TRUE
)。因子具有基础整数表示,因此当您在同一向量中组合因子和数字时,因子将提升为数字类型。因子的第一个级别对应1
,这就是a
成为1
的原因。
关于因子与字符类型转换,请注意以下内容:
c("a", 2, 3)
## "a" "2" "3"
c(factor("a"), 2, 3)
## 1 2 3
答案 1 :(得分:0)
@Chaconne的回答给出了一个很好的解释。如果确实希望按照您的意愿行事,您可以这样做:
df1<-data.frame(v1=c(1,2,1),v2=c(3,3,2),v3=c(2,5,8))
df2<-data.frame("a","a","a",stringsAsFactors=FALSE)
df1[1,] <- df2[1,]
但它会将所有数据转换为(&#34;强制&#34;)字符类型,这可能不是你想要的......
也许你想要names(df1) <- df2[1,]
?