我想做data.frame1 [1,]< -data.frame [1,],但我遇到了麻烦

时间:2014-09-07 16:50:46

标签: r

考虑这个样本数据

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

为什么呢?我应该怎么做才能得到我想要的结果?

2 个答案:

答案 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,]