【发布时间】:2021-02-04 07:52:52
【问题描述】:
我有一个如下所示的数据框:
ID1 | ID2
I105 | I105
I122 | I122
**I107 | I108**
I118 | I118
**I139 | I140**
现在我想将 [3,2] 中的“I108”替换为 [3,1] 中的“I107”
与第 5 行中的值相同。
实际的列表有点长,所以我必须找到一种方法来自动完成。
有人有想法吗?
【问题讨论】:
标签: r
我有一个如下所示的数据框:
ID1 | ID2
I105 | I105
I122 | I122
**I107 | I108**
I118 | I118
**I139 | I140**
现在我想将 [3,2] 中的“I108”替换为 [3,1] 中的“I107”
与第 5 行中的值相同。
实际的列表有点长,所以我必须找到一种方法来自动完成。
有人有想法吗?
【问题讨论】:
标签: r
也许您希望仅在 ID1 和 ID2 不同时替换 ID1 值。
transform(df, ID1 = ifelse(ID1 != ID2, ID2, ID1))
# ID1 ID2
#1 I105 I105
#2 I122 I122
#3 I108 I108
#4 I118 I118
#5 I140 I140
【讨论】:
df[] <- lapply(df, as.character),然后重试。
is.na 来检查NA 的值。像这样的东西:transform(df, ID1 = ifelse(ID1 != ID2 | is.na(ID1), ID2, ID1))
我们可以使用索引将“ID2”的值替换为“ID1”中的对应值
i1 <- c(3, 5)
df1 <- type.convert(df1, as.is = TRUE) # // in case if there are factor columns
# or if it is based on difference
i1 <- with(df1, ID2 != ID1)
df1$ID2[i1] <- df1$ID1[i1]
-输出
df1
#. ID1 ID2
#1 I105 I105
#2 I122 I122
#3 I108 I108
#4 I118 I118
#5 I140 I140
如果我们想创建 ID1 的副本,只需执行分配即可。不需要任何条件
df1$ID2 <- df1$ID1
【讨论】: