Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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_Json_Dataframe - Fatal编程技术网

R-根据另一列中的另一行向下填充列中的行

R-根据另一列中的另一行向下填充列中的行,r,json,dataframe,R,Json,Dataframe,我正在RStudio中读取来自周围传感器的JSON数据 在城市里。 然后,我用sofa将这些数据转换为数据帧 和jsonlite包。数据基本上是传感器数据 由位置数据组成,每个位置测量都有 在资源路径中传输和编码的一些环境数据,如 (/6/0/0和/6/0/1表示纬度和经度信息)-由于 我正在读取的JSON数据,我的R中的位置信息 dataframe与环境数据位于相同的“值”列中 比如湿度,二氧化碳等,所以我把位置信息弄丢了 单独观察,因为位置信息也被视为 价值请参阅下面转换的JSON data

我正在RStudio中读取来自周围传感器的JSON数据 在城市里。 然后,我用sofa将这些数据转换为数据帧 和jsonlite包。数据基本上是传感器数据 由位置数据组成,每个位置测量都有 在资源路径中传输和编码的一些环境数据,如 (/6/0/0和/6/0/1表示纬度和经度信息)-由于 我正在读取的JSON数据,我的R中的位置信息 dataframe与环境数据位于相同的“值”列中 比如湿度,二氧化碳等,所以我把位置信息弄丢了 单独观察,因为位置信息也被视为 价值请参阅下面转换的JSON data.frame

数据帧

这里是所需数据帧的视图

[这是所需的df-每行都有相关的“lat”和“long”信息-取决于“value”列中的值,只要“value”列中有一个新值。][2]

> |------------------------------------------------------- |    
> resourcePath    |     value  |UTC       |lat     |long . |
>   
> /6/0/0          |    48.18   |14:51:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /6/0/1          |    16.39   |14:51:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/515/5700  |         34 |14:52:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/289/5700  |         15 |14:53:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/515/5700  |        55  |4:53:47  |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/289/5700  |       9004 |14:54:23 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3304/0/5700    |       367  | 14:54:34| 48.18  |16.39   |
> |---------------|------------|---------|--------|--------|   
> /3315/0/5700    |         47 |14:54:54 | 48.18  |16.39   |
> |---------------|------------|---------|--------|--------|   
> /6/0/0          |     50.34  |14:57:11 |50.34   | 20.52  |
> |---------------|------------|---------|--------|--------|   
> /6/0/1          |     20.52  |14:57:13 |50.34   | 20.52  |
> |---------------|------------|---------|--------|--------|   
> /3304/0/5700    |         84 |14:57:34 |50.34   | 20.52  |
> |---------------|------------|---------|--------|--------|   
> /3315/0/5700    |         56 |14:57:45    50.34   20.52  |
我使用lappy循环,但是目前我没有得到想要的df。 任何暗示都广受赞赏。
Thomas

下面是一个使用tidyr软件包的解决方案。这假设每组数据的第一行是“/6/0/0”行,第二行是“/6/0/1”


df如果看不到JSON数据,就很难提供任何有意义的建议或建议。@Dave2e:我认为JSON数据在这里不太相关,因为我的JSON数据已经在R数据框中了。下面是我得到的JSON的摘录。“资源”:[{“资源路径”:“/6/0/0”}、//北纬度的GPS纬度{“资源路径”:“/6/0/1”}、//东纬度的GPS经度{“资源路径”:“/3300/256/5700”}、//ppb中的CO浓度{“资源路径”:/3300/257/5700”}、//ppb中的SO2浓度{“资源路径”:/3300/258/5700”},//在ppb{“resourcePath”:“/3300/515/5700”中没有浓度,//NO2 conc.在PPB中,解决这个问题的最佳方法是在将JSON数据转换为数据帧的过程中。将JSON作为列表读取,编写一个函数为每个观察值构建一行,
lappy
it覆盖列表,然后将行组合起来。这很有魅力,即使数据帧包含超过200k行。谢谢非常感谢!!
> |------------------------------------------------------- |    
> resourcePath    |     value  |UTC       |lat     |long . |
>   
> /6/0/0          |    48.18   |14:51:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /6/0/1          |    16.39   |14:51:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/515/5700  |         34 |14:52:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/289/5700  |         15 |14:53:43 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/515/5700  |        55  |4:53:47  |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3300/289/5700  |       9004 |14:54:23 |  48.18 | 16.39  |
> |---------------|------------|---------|--------|--------|   
> /3304/0/5700    |       367  | 14:54:34| 48.18  |16.39   |
> |---------------|------------|---------|--------|--------|   
> /3315/0/5700    |         47 |14:54:54 | 48.18  |16.39   |
> |---------------|------------|---------|--------|--------|   
> /6/0/0          |     50.34  |14:57:11 |50.34   | 20.52  |
> |---------------|------------|---------|--------|--------|   
> /6/0/1          |     20.52  |14:57:13 |50.34   | 20.52  |
> |---------------|------------|---------|--------|--------|   
> /3304/0/5700    |         84 |14:57:34 |50.34   | 20.52  |
> |---------------|------------|---------|--------|--------|   
> /3315/0/5700    |         56 |14:57:45    50.34   20.52  |
df<-structure(list(resourcePath = structure(c(5L, 6L, 2L, 1L, 2L, 
1L, 3L, 4L, 5L, 6L, 3L, 4L), .Label = c("/3300/289/5700", "/3300/515/5700", 
"/3304/0/5700", "/3315/0/5700", "/6/0/0", "/6/0/1"), class = "factor"), 
    value = c(48.18, 16.39, 34, 15, 55, 9004, 367, 47, 50.34, 
    20.52, 84, 56), UTC = structure(c(1L, 1L, 2L, 3L, 4L, 5L, 
    6L, 7L, 8L, 9L, 10L, 11L), .Label = c("14:51:43", "14:52:43", 
    "14:53:43", "14:53:47", "14:54:23", "14:54:34", "14:54:54", 
    "14:57:11", "14:57:13", "14:57:34", "14:57:45"), class = "factor"), 
    lat = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    long = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("resourcePath", 
"value", "UTC", "lat", "long"), class = "data.frame", row.names = c(NA, 
-12L))    

f$resourcePath<-as.character(df$resourcePath)

#reset lat and long columns to NA for the fill command
df$lat<-NA
df$long <- NA

#find rows with the lat resource
#assumes this is the first row of each data grouping
latrows<-which(df$resourcePath=="/6/0/0")
df$lat[latrows]<-df$value[latrows]
df$long[latrows]<-df$value[(latrows+1)]

library(tidyr)  #needed for the fill function
df<-fill(df, lat, long)