首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R函数(lapply {ifelse})?根据索引df返回数据文件中的值

R函数(lapply {ifelse})?根据索引df返回数据文件中的值
EN

Stack Overflow用户
提问于 2021-06-26 15:04:52
回答 1查看 61关注 0票数 0

我有一个相当大的位置和关联点的数据集。所有的点和位置都是索引值。我试图以简洁的方式将索引值从另一个df转换为位置代码,同时保留"na“值。这是我尝试过的。

代码语言:javascript
复制
a <- c(1,2,3,5, "na", "na")
b <- c(2,1,5,7,3,6)
c <- c(3,6,2,4,1,"na")

df <- rbind(a,b,c) 
df <- as.data.frame(df)

d <- c(1,2,3,4,5,6,7,8)
e <- c(0115,0116,1117,1119,1237,1456,1901,2135)
df2 <- cbind(d,e)
df2 <- as.data.frame(df2)

test <- lapply(df[2:6], function(x){ifelse(x %in% df2$d, df2$e, "na")})

结果是在第一列关联值的行之间重复值。有什么办法解决这个问题吗。显然,我不明白我是如何应用函数的。

EN

回答 1

Stack Overflow用户

发布于 2021-06-26 15:21:22

在数据中使用NA而不是"na“。

代码语言:javascript
复制
df3 <- melt(df, id.var = "V1", value.name = "d")
merge(df3, df2, by = "d", all = TRUE)

#     d V1 variable    e
# 1   1  3       V5  115
# 2   1  2       V2  115
# 3   2  1       V2  116
# 4   2  3       V3  116
# 5   3  1       V3 1117
# 6   3  2       V5 1117
# 7   4  3       V4 1119
# 8   5  2       V3 1237
# 9   5  1       V4 1237
# 10  6  3       V2 1456
# 11  6  2       V6 1456
# 12  7  2       V4 1901
# 13  8 NA     <NA> 2135
# 14 NA  1       V6   NA
# 15 NA  1       V5   NA
# 16 NA  3       V6   NA

数据

代码语言:javascript
复制
df <- structure(list(V1 = c(1, 2, 3), V2 = c(2, 1, 6), V3 = c(3, 5, 
2), V4 = c(5, 7, 4), V5 = c(NA, 3, 1), V6 = c(NA, 6, NA)), .Names = c("V1", 
"V2", "V3", "V4", "V5", "V6"), row.names = c("a", "b", "c"), class = "data.frame")

df2 <- structure(list(d = c(1, 2, 3, 4, 5, 6, 7, 8), e = c(115, 116, 
1117, 1119, 1237, 1456, 1901, 2135)), .Names = c("d", "e"), row.names = c(NA, 
-8L), class = "data.frame")

使用lapply

代码语言:javascript
复制
lapply(df[2:6], function(x){
  y <- which(!is.na(x))
  x[y] <- df2$e[na.omit(x)]
  # x[y] <- df2$e[df2$d[na.omit(x)]]  # using d
  return(x)
})
# $V2
# [1]  116  115 1456
# 
# $V3
# [1] 1117 1237  116
# 
# $V4
# [1] 1237 1901 1119
# 
# $V5
# [1]   NA 1117  115
# 
# $V6
# [1]   NA 1456   NA
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68143596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档