Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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 - Fatal编程技术网

如何用R中另一列的项替换列中的项?

如何用R中另一列的项替换列中的项?,r,R,我相信这是非常简单的,但我不知道如何在R中做到这一点 在同一个数据框中有两列我想处理,它们都包含字符。我想写一行(或两行)代码,仅当第2列中存在项目时,才将第1列中的项目替换为第2列中的项目。如果第2列中没有该项目,则不要更换第1列中的项目。我觉得我应该使用if_else功能,但我不确定应该写什么来表示该项目的“存在” 下表示例: 第1栏 第2栏 蓝色 绿色 蓝色 红色 粉红色 绿色 这能解决你的问题吗 df <- data.frame(v1 = c("blue", &

我相信这是非常简单的,但我不知道如何在R中做到这一点

在同一个数据框中有两列我想处理,它们都包含字符。我想写一行(或两行)代码,仅当第2列中存在项目时,才将第1列中的项目替换为第2列中的项目。如果第2列中没有该项目,则不要更换第1列中的项目。我觉得我应该使用
if_else
功能,但我不确定应该写什么来表示该项目的“存在”

下表示例:

第1栏 第2栏 蓝色 绿色 蓝色 红色 粉红色 绿色
这能解决你的问题吗

df <- data.frame(v1 = c("blue", "green", "red", "pink"), 
                 v2 = c(NA, "blue", NA, "green" ))

df$v1 <- ifelse(!is.na(df$v2), df$v2, df$v1)

df这是一种使用逻辑索引的方法。如果第2列中的值为空(无字符)或缺少(
NA
),则索引
i
TRUE
)。然后否定该条件并在适当的位置赋值

i <- nchar(df1[[2]]) == 0 | is.na(df1[[2]])
df1[!i, 1] <- df1[!i, 2]

df1
#  Column.1 Column.2
#1     Blue         
#2     Blue     Blue
#3      Red         
#4    Green    Green

您能否以
dput
格式发布样本数据?请使用
dput(df)
的输出编辑问题。或者,如果dput(头部(df,20))的输出太大
。(
df
是数据集名称的占位符。)是的!非常感谢你!
df$v1 <- ifelse(df$v2 != "" | !is.na(df$v2)), df$v2, df$v1)
i <- nchar(df1[[2]]) == 0 | is.na(df1[[2]])
df1[!i, 1] <- df1[!i, 2]

df1
#  Column.1 Column.2
#1     Blue         
#2     Blue     Blue
#3      Red         
#4    Green    Green
df1 <-
structure(list(Column.1 = c("Blue", "Blue", "Red", "Green"), 
    Column.2 = c("", "Blue", "", "Green")), row.names = c(NA, 
-4L), class = "data.frame")