我有这3列。在“Basiswert”中有一些NA值。如果在“Basiswert”中有NA值,我想用Basiswert形式的相同数字替换它,它出现在列“D”或“E”中。例如:在第2行中,在Basiswert中的值中有NA。这个值必须用第3行中的USDCAD = 12442替换。
structure(list(D = c("12449", "12448", "12447", "12446", "12442",
"12441", "12440", "12439", "12438", "12437"), E = c("0", "12442",
"12442", "12430", "0", "12430", "12436", "12436", "12430", "12430"
), Basiswert = c("EURJPY", NA, "USDCAD", "EURAUD", "USDCAD",
"EURAUD", NA, "GBPJPY", NA, "EURAUD")), class = "data.frame", row.names = c(NA,
-10L))
字符串
编辑:
library(dplyr)
data %>% mutate(Basiswert = ifelse(is.na(Basiswert) == FALSE &
D == E, Basiswert, NA))
型
不起作用。
5条答案
按热度按时间mhd8tkvw1#
另一个基本的R解决方案:
字符串
既然你说你想在
D
和E
之间分组,我建议这可以是一个链:型
ifelse(is.na(z), z, ..)
和replace(z, is.na(z), ..)
在这里实际上是相同的.我回避ifelse
的唯一原因是,如果你的数据不是int/num/chr.例如,如果你在日期或时间戳上使用这个逻辑,那么ifelse
should not be used。使用
max(..)
来确定替换值对于字符串来说是一个小技巧;它在某些情况下会发出警告(在这里对我来说就是这样),而使用na.omit(z)[1]
将 * 总是 * 返回第一个非NA
值,或者如果不存在NA
值,则返回NA
本身。注意,这是一种估算形式,在寻找类似方法时,这是一个很好的搜索术语。在这种情况下,我们通过找到第一个非
NA
值来估算缺失值,这是一种方法;对于字符串,我认为其他流行的估算值的方法包括:(a)随机;(b)最频繁;(c)最频繁;(d)最频繁;(e)最频繁。以及(c)最不频繁,当每组预期有多个值时,可能用于平衡。数值插补可以带来许多其他选项,包括均值、众数、中位数、最小值/最大值等。2ekbmq322#
不太清楚这个问题。看看这个是否有效。
字符串
pxiryf3j3#
基础R解决方案(在样本数据中,只有E的值重复,因此我们可以忽略D):
字符串
考虑D的Tidyverse解决方案,如果D也需要考虑:
型
输入数据:
型
4dbbbstv4#
使用@Hann Shaw的相同逻辑,我们也可以使用
replace
:字符串
bxfogqkk5#
字符串
Manny感谢您的努力和解决方案。然而,遗憾的是,它对整个数据集不起作用。