在R中如何用其他数据框为数据框赋值字符串及行索引赋值纠错
在R中通过行索引用另一数据框的字符串赋值数据框列
这个问题的核心是两个关键点:目标列的类型不兼容,以及如果name列是R默认的因子类型时,直接取值会得到整数编码而非字符串内容。下面给你分步解决的方法:
1. 先修正列的类型
首先看你的status列,目前是整数类型(因为里面有数值1和NA),整数列无法直接存储字符串,强制赋值时R会自动把字符串转成整数(比如"romal2"被解析成了2)。另外如果你的name列是因子类型,直接取final[y,"name"]得到的是因子的底层整数编码,也不是你要的字符串。
先把这两列转成字符型:
# 把name列转成字符型(如果原本是因子的话) final$name <- as.character(final$name) # 把status列转成字符型,这样就能容纳字符串了 final$status <- as.character(final$status)
2. 执行赋值操作
现在再用你的行索引y赋值,就能得到预期的字符串了:
y <- as.integer(2) final[2, "status"] <- final[y, "name"]
执行后你的final数据框会变成:
name num status 1 romal 1 <NA> 2 romal2 2 romal2 3 romal3 3 1 4 romal4 4 <NA> 5 romal5 1 <NA>
简化的一步式操作(用dplyr)
如果你习惯用dplyr包,可以一步完成类型转换和赋值,更简洁:
library(dplyr) y <- as.integer(2) final <- final %>% mutate( name = as.character(name), status = replace(as.character(status), 2, name[y]) )
内容的提问来源于stack exchange,提问作者Romal Jaiswal
相关产品推荐
相关产品推荐

