Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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_Dataframe_Data.table_Posixct - Fatal编程技术网

如何将特定值从一个数据列复制到另一个数据列,同时匹配R中的其他列?

如何将特定值从一个数据列复制到另一个数据列,同时匹配R中的其他列?,r,dataframe,data.table,posixct,R,Dataframe,Data.table,Posixct,我已经搜索了很多地方(stackoverflow、r-blogger等),但还没有找到一个在r中这样做的好选择。希望有人有一些想法 我有一套环境采样数据。数据包括各种字段(就诊日期、地区、位置、样本介质、样本成分、结果等) 这里是相关字段的子集。这就是我开始的地方 visit_date region location media component result 1990-08-20 LAKE 555723 water M

我已经搜索了很多地方(stackoverflow、r-blogger等),但还没有找到一个在r中这样做的好选择。希望有人有一些想法

我有一套环境采样数据。数据包括各种字段(就诊日期、地区、位置、样本介质、样本成分、结果等)

这里是相关字段的子集。这就是我开始的地方

visit_date   region    location     media      component     result
1990-08-20   LAKE      555723       water       Mg            *Nondetect
1999-07-01   HILL      432422       water       Ca            3.2
2010-09-12   LAKE      555723       water       pH            6.8
2010-09-12   LAKE      555723       water       Mg            2.1
2010-09-12   HILL      432423       water       pH            7.2
2010-09-12   HILL      432423       water       N             0.8
2010-09-12   HILL      432423       water       NH4          112
我希望达到的是这样的表/数据帧:

visit_date   region    location     media      component     result        pH
1990-08-20   LAKE      555723       water       Mg            *Nondetect  *Not recorded
1999-07-01   HILL      432422       water       Ca            3.2         *Not recorded
2010-09-12   LAKE      555723       water       pH            6.8         6.8
2010-09-12   LAKE      555723       water       Mg            2.1         6.8
2010-09-12   HILL      432423       water       pH            7.2         7.2
2010-09-12   HILL      432423       water       N             0.8         7.2
2010-09-12   HILL      432423       water       NH4          112          7.2
我尝试在这里使用这个方法-- --但不幸的是没有达到我想要的结果。相反,pH列是我的预填充值
-999
NA
,而不是收集到的特定就诊日期的pH值。由于结果数据集约为500k条记录,因此我使用
unique(tResult$pH)
来确定pH列的值

这就是尝试
res
是原始结果数据。frame和
component
将是pH结果子集(主要结果表中的pH样本结果)


键为什么Mg的值为6.8?你能详细说明一下吗?这些都是为了说明而编造的数值,所以6.8在现实中没有依据。对于mg,300 mg/l的值更为现实。谢谢。我正在检查结果,看看它是否是我所需要的。到目前为止,还不错。我以前没有把
zoo
作为解决方案。我要确保的是,根据主要结果填充的给定pH值与访问日期、区域、位置和介质相匹配(基本上是来自相同水样的pH样品结果)。我只是想知道动物园的na.locf是如何运作的。根据我目前的阅读,它寻找先前的非NA值。它是否也在查看其他列是否匹配,或者具体是日期?在这种情况下,您不需要使用
na.locf
,因此也不需要使用zoo
包。
数据表
足够了。请查看更新的解决方案。
keys <- c("region", "location", "visit_date", "media")

tResults <- data.table(res, key=keys)
tComponent <- data.table(component, key=keys)

tResults[tComponent, pH>0]
#df1 is your first data set and is dataframe
df1$phtem<-with(df1,ifelse(component=="pH",result,NA))

library(data.table)
library(zoo) # locf function

setDT(df1)[,pH:=na.locf(phtem,na.rm = FALSE)]
    visit_date region location media component     result phtem  pH
1: 1990-08-20   LAKE   555723 water        Mg *Nondetect    NA  NA
2: 1999-07-01   HILL   432422 water        Ca        3.2    NA  NA
3: 2010-09-12   LAKE   555723 water        pH        6.8   6.8 6.8
4: 2010-09-12   LAKE   555723 water        Mg        2.1    NA 6.8
5: 2010-09-12   HILL   432423 water        pH        7.2   7.2 7.2
6: 2010-09-12   HILL   432423 water         N        0.8    NA 7.2
7: 2010-09-12   HILL   432423 water       NH4        112    NA 7.2
library(data.table)
setDT(df1)[,pH:=result[component=="pH"],by="region,location,visit_date,media"]
df1

   visit_date region location media component     result  pH
1: 1990-08-20   LAKE   555723 water        Mg *Nondetect  NA
2: 1999-07-01   HILL   432422 water        Ca        3.2  NA
3: 2010-09-12   LAKE   555723 water        pH        6.8 6.8
4: 2010-09-12   LAKE   555723 water        Mg        2.1 6.8
5: 2010-09-12   HILL   432423 water        pH        7.2 7.2
6: 2010-09-12   HILL   432423 water         N        0.8 7.2
7: 2010-09-12   HILL   432423 water       NH4        112 7.2