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

R 重新列出包含数据帧的列表

R 重新列出包含数据帧的列表,r,dataframe,R,Dataframe,我有要编辑的嵌套列表。为了方便起见,我想使用unlist和relist。问题在于relist似乎不尊重底层结构: # Some list my_list <- list(vec = 'string', df = data.frame(X=0,Y=0,Z=0)) str(my_list) # List of 2 # $ vec: chr "string" # $ df :'data.frame': 1 obs. of 3 variables: #

我有要编辑的嵌套列表。为了方便起见,我想使用
unlist
relist
。问题在于
relist
似乎不尊重底层结构:

# Some list
my_list <- list(vec = 'string',
                df  = data.frame(X=0,Y=0,Z=0))
str(my_list)
# List of 2
# $ vec: chr "string"
# $ df :'data.frame':   1 obs. of  3 variables:
#   ..$ X: num 0
# ..$ Y: num 0
# ..$ Z: num 0

# Unlist to modify nested content
my_unlist <- unlist(my_list)
str(my_unlist)
# Named chr [1:4] "string" "0" "0" "0"
# - attr(*, "names")= chr [1:4] "vec" "df.X" "df.Y" "df.Z"

# Write some data
my_unlist[c("df.X","df.Y","df.Z")] <- c(0,1,1)
str(my_unlist)
# Named chr [1:4] "string" "0" "1" "1"
# - attr(*, "names")= chr [1:4] "vec" "df.X" "df.Y" "df.Z"

# Relist
my_relist <- relist(flesh = my_unlist, skeleton = my_list)
str(my_relist)
# List of 2
# $ vec: chr "string"
# $ df : Named chr [1:3] "0" "1" "1"
# ..- attr(*, "names")= chr [1:3] "X" "Y" "Z"
但这并没有多大帮助,因为我想任意执行此操作

理想情况下,我会有一个函数,在保留结构的同时,用
myunlist
的内容填充
myu列表。因此,预期的产出将是

my_relist
# $vec
# [1] "string"
# 
# $df
#   X Y Z
# 1 0 1 1

编辑

下面是一些示例数据以及更详细的示例

# Sample data: a simple json
test_json <- '{
  "email": "string",
"locations": [
{
  "address": {
  "city": "string",
  "country": "string",
  "houseNr": "string",
  "state": "string",
  "streetName": "string",
  "zipCode": "string"
  },
  "latitude": 0,
  "longitude": 0,
  "name": "string"
}
],
"phone": "string"
}'

# Reading the json sample
json <- jsonlite::fromJSON(test_json)

# Now we unlist json so that we can easily modify nested elements
json_unlist <- unlist(json)
# Let's add a few address components
fields_to_modify <- c("locations.address.houseNr","locations.address.streetName","locations.address.city","locations.address.country")
json_unlist[fields_to_modify] <- c("1", "Boulevard de Londres","Casablanca","Morocco")
# Now we want to convert it back to json
# First step: we must relist
attempt <- relist(flesh = json_unlist, skeleton = json)
attempt$locations
#      address               latitude              longitude                   name 
# "Casablanca"              "Morocco"                    "1"               "string" 
#                     <NA>                   <NA>                   <NA>                   <NA> 
#   "Boulevard de Londres"               "string"                    "0"                    "0" 
#       <NA> 
#   "string" 
#示例数据:一个简单的json

使用问题中的
json
测试_json,注意,例如,由于以下内容具有相同的含义:

json[["locations"]][["address"]][["city"]]
json[[c("locations", "address", "city")]]
假设在命名未列出的对象时使用点,如问题中所示,我们可以使用
Map
如下:

setList <- function(List, Unlist) {
  nms <- names(Unlist)
  Map(function(x, y) List[[x]] <<- Unlist[[y]], strsplit(nms, "\\."), nms)
  List
}

setList(my_list, my_unlist)
setList(json, json_unlist)

setList使用问题中的
json
,请注意,例如,由于以下内容具有相同的含义:

json[["locations"]][["address"]][["city"]]
json[[c("locations", "address", "city")]]
假设在命名未列出的对象时使用点,如问题中所示,我们可以使用
Map
如下:

setList <- function(List, Unlist) {
  nms <- names(Unlist)
  Map(function(x, y) List[[x]] <<- Unlist[[y]], strsplit(nms, "\\."), nms)
  List
}

setList(my_list, my_unlist)
setList(json, json_unlist)

setList为避免混淆,能否显示所需的输出?或者,
my_relist
是您想要的吗?@markus预期的输出是(
str(my_relist)
)中显示的
my_relist
)-我仍然会立即添加实际内容。因此,在这个特定的示例中,您正试图做的是
my_list$df[,c(“Y”,“Z”)]。假设现在
my_list
包含多个数据帧或子列表,您只需更改say
my_list$df_7[,c(“A”,“H”)]
my_list$df_1[,“Z”]
。那么,这并不是说简单明了,而且
unlist
似乎足以胜任这项任务。我想我已经明白了。因此,您有一个包含字符向量和多个数据帧的列表,您需要一种方法来更改数据帧中的一些条目。你能用解决这个问题的示例数据更新你的问题吗?为了避免混淆,你能展示你想要的输出吗?或者,
my_relist
是您想要的吗?@markus预期的输出是(
str(my_relist)
)中显示的
my_relist
)-我仍然会立即添加实际内容。因此,在这个特定的示例中,您正试图做的是
my_list$df[,c(“Y”,“Z”)]。假设现在
my_list
包含多个数据帧或子列表,您只需更改say
my_list$df_7[,c(“A”,“H”)]
my_list$df_1[,“Z”]
。那么,这并不是说简单明了,而且
unlist
似乎足以胜任这项任务。我想我已经明白了。因此,您有一个包含字符向量和多个数据帧的列表,您需要一种方法来更改数据帧中的一些条目。您能否使用解决此问题的示例数据更新您的问题?