【问题标题】:Replace NA values in one column based on another column根据另一列替换一列中的 NA 值
【发布时间】:2012-08-24 22:36:29
【问题描述】:
 Id         authId          sessionId                         
139 "56763313.wrpy" "4233a31b52f92c6fe8af4f04f2116657"
123 "221156400"     "ae04ddacadaa3429ca77dab674a008bf"
126 "221156400"     "ae04ddacadaa3429ca77dab674a008bf"
144 "221156400"     "ae04ddacadaa3429ca77dab674a008bf"
143 "221156400"     "ae04ddacadaa3429ca77dab674a008bf"
118 NA              "ae04ddacadaa3429ca77dab674a008bf"
121 NA              "ae04ddacadaa3429ca77dab674a008bf"
122 NA              "ae04ddacadaa3429ca77dab674a008bf"
75  "5676614888888" "ca673b5e60a6f70963bf3017e3cb0780"
276 "56711325.cc79" "f6075188c0f479d7a423744f6c8655b3"
256 "56711325.cc79" "f6075188c0f479d7a423744f6c8655b3"
275 "56711325.cc79" "f6075188c0f479d7a423744f6c8655b3"
152 NA              "f6075188c0f479d7a423744f6c8655b3"
158 NA              "f6075188c0f479d7a423744f6c8655b3"
28  "221124184"     "fc71064548bb35d05293bd67d55f1693"
31  "221124184"     "fc71064548bb35d05293bd67d55f1693"

我想根据sessionId 填补缺失的authId。我试图在不使用循环的情况下做到这一点。例如:

143 "221156400"     "ae04ddacadaa3429ca77dab674a008bf"
118 "221156400"     "ae04ddacadaa3429ca77dab674a008bf"

【问题讨论】:

  • 仅供参考:没有必要在标题中添加语言。这就是标签的用途。

标签: r missing-data


【解决方案1】:

首先使用authIdsessionId 的唯一组合创建一个数据框。然后为任何authId(即NA)找到sessionId。使用唯一表找到sessionId的关联authId

df <- read.table(text="Id         authId          sessionId                         
139 56763313.wrpy 4233a31b52f92c6fe8af4f04f2116657
123 221156400     ae04ddacadaa3429ca77dab674a008bf
126 221156400     ae04ddacadaa3429ca77dab674a008bf
144 221156400     ae04ddacadaa3429ca77dab674a008bf
143 221156400     ae04ddacadaa3429ca77dab674a008bf
118 NA              ae04ddacadaa3429ca77dab674a008bf
121 NA              ae04ddacadaa3429ca77dab674a008bf
122 NA              ae04ddacadaa3429ca77dab674a008bf
75  5676614888888 ca673b5e60a6f70963bf3017e3cb0780
276 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
256 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
275 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
152 NA              f6075188c0f479d7a423744f6c8655b3
158 NA              f6075188c0f479d7a423744f6c8655b3
28  221124184     fc71064548bb35d05293bd67d55f1693
31  221124184     fc71064548bb35d05293bd67d55f1693", header=T)


# find unique combinations of authId and sessionID, but not when authId is NA
uniques <- unique(df[c("authId", "sessionId")])
uniques <- uniques[!is.na(uniques$authId),]

# replace authID's that are NA with the unique authId associated with the sessionId
na.authId <- which(is.na(df$authId))
na.sessionId <- df$sessionId[na.authId]
df$authId[na.indices] <- uniques$authId[match(na.sessionId, uniques$sessionId)]


#     Id        authId                        sessionId
# 1  139 56763313.wrpy 4233a31b52f92c6fe8af4f04f2116657
# 2  123     221156400 ae04ddacadaa3429ca77dab674a008bf
# 3  126     221156400 ae04ddacadaa3429ca77dab674a008bf
# 4  144     221156400 ae04ddacadaa3429ca77dab674a008bf
# 5  143     221156400 ae04ddacadaa3429ca77dab674a008bf
# 6  118     221156400 ae04ddacadaa3429ca77dab674a008bf
# 7  121     221156400 ae04ddacadaa3429ca77dab674a008bf
# 8  122     221156400 ae04ddacadaa3429ca77dab674a008bf
# 9   75 5676614888888 ca673b5e60a6f70963bf3017e3cb0780
# 10 276 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
# 11 256 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
# 12 275 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
# 13 152 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
# 14 158 56711325.cc79 f6075188c0f479d7a423744f6c8655b3
# 15  28     221124184 fc71064548bb35d05293bd67d55f1693
# 16  31     221124184 fc71064548bb35d05293bd67d55f1693

【讨论】:

  • 我能够创建一个具有 authId 和 sessionId 的独特组合的数据框。但是我无法使用匹配功能。
  • 如果您希望获得更多帮助,您必须更详细地解释什么不起作用...
  • 很抱歉,当我彻底查看了我的 df。它在会话 ID 的列中也有 NA 值。
  • 谢谢 Ben 我明白了...感谢您的帮助。
  • Ben 输出中有错误,ID 值为 276,256,275,152,158 的行必须具有相同的 authId,因为它们具有相同的 sessionId。你能帮我解决这个错误吗?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2018-11-17
  • 2020-08-13
  • 1970-01-01
  • 2020-05-18
相关资源
最近更新 更多