将data.frame插入另一个时的字符转换

时间:2017-03-21 18:07:13

标签: r dataframe types character

d = data.frame(matrix(NA, nrow=6,ncol=3))
names(d) = c("a","b","c")

将矢量插入d按预期工作

d[1,] = c(1, "Hello", "P")
d[2,] = c(2, "Hello", "Q")

print(d) 
     a     b    c
1    1 Hello    P
2    2 Hello    Q
3 <NA>  <NA> <NA>
4 <NA>  <NA> <NA>
5 <NA>  <NA> <NA>
6 <NA>  <NA> <NA>

尝试将data.frame插入d

时,我会期望得到相同的结果
sub_d = data.frame(
    a = 1:2,
    b = rep("Hello",2),
    c = c("P","Q")
)

d[1:2,] = sub_d
d

   a  b  c
1  1  1  1
2  2  1  2
3 NA NA NA
4 NA NA NA
5 NA NA NA
6 NA NA NA

但由于某些原因,字符会转换为整数,即使我事先指定d$a = as.character(d$a); d$c = as.character(d$c)也是如此。

我想可以迭代data.frame的每一行来插入构成向量。还有另一种方法可以将data.frame插入另一个吗?

3 个答案:

答案 0 :(得分:2)

stringsAsFactors添加到您的data.frames,为您提供所需的输出:

d = data.frame(matrix(NA, nrow=6,ncol=3), stringsAsFactors = F)
names(d) = c("a","b","c")    

sub_d = data.frame(
  a = 1:2,
  b = rep("Hello",2),
  c = c("P","Q"), stringsAsFactors = F
)

d[1:2,] <- sub_d
d

答案 1 :(得分:2)

可能绊倒你的是@Config(constants = BuildConfig.class, shadows = MediaRouteButtonShadow.class) 默认情况下将字符串转换为因子。下面将插入新的数据框,更像我想,你想要它:

data.frame

您看到的整数是未标记的因子水平。如果(例如)d = data.frame(matrix(NA, nrow=6,ncol=3)) names(d) = c("a","b","c") sub_d = data.frame( a = 1:2, b = rep("Hello",2), c = c("P","Q"), stringsAsFactors=F ) d[1:2,] <- sub_d d a b c 1 1 Hello P 2 2 Hello Q 3 NA <NA> <NA> 4 NA <NA> <NA> 5 NA <NA> <NA> 6 NA <NA> <NA> 已经被定义为一个因素,带有标签,而d$b是一个在同一级别上具有相同标签的因素,那么您就没有问题。

答案 2 :(得分:1)

如果您使用sub_d检查数据框str的结构,则会看到列ab是因素。

str(sub_d)

#'data.frame':  2 obs. of  3 variables:
#$ a: int  1 2
#$ b: Factor w/ 1 level "Hello": 1 1
#$ c: Factor w/ 2 levels "P","Q": 1 2

您可以使用lapply

将这些列转换为字符
sub_d[-1] <- lapply(sub_d[-1], as.character)

然后如果你做

d[1:2,] <- sub_d

你得到了

d
#     a     b    c
#1    1 Hello    P
#2    2 Hello    Q
#3 <NA>  <NA> <NA>
#4 <NA>  <NA> <NA>
#5 <NA>  <NA> <NA>
#6 <NA>  <NA> <NA>