Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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/1/list/4.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
在for循环中提取数据并将其附加到新数据集_R_List_Dataframe_Loops_Append - Fatal编程技术网

在for循环中提取数据并将其附加到新数据集

在for循环中提取数据并将其附加到新数据集,r,list,dataframe,loops,append,R,List,Dataframe,Loops,Append,我有一个我认为很简单的问题,但我不知道怎么做。我对列表、循环等相当陌生 我有一个小数据集: df <- c("one","two","three","four") df <- as.data.frame(df) df 这或多或少是我所了解到的: blah <- list() for(i in 1:3){ blah[[i]]<- i } 当我将来使用它时,长度是可变的,所以我需要在一

我有一个我认为很简单的问题,但我不知道怎么做。我对列表、循环等相当陌生

我有一个小数据集:

df <- c("one","two","three","four")
df <- as.data.frame(df)
df

这或多或少是我所了解到的:

blah <- list()

for(i in 1:3){
  blah[[i]]<- i
}
当我将来使用它时,长度是可变的,所以我需要在一个循环中自动化它。否则,我就这么做

one <- df[1,]
two <- df[2,]

list(one, rbind(one, two))
有什么想法吗?

基本解决方案:

# Coerce df vector of data.frame to character, store as new data.frame: str_df => data.frame 
str_df <- transform(df, df = as.character(df))

# Allocate some memory in order to split data into a list:  df_list => empty list
df_list <- vector("list", nrow(str_df))

# Split the string version of the data.frame into a list as required: 
# df_list => list of character vectors
df_list <- lapply(seq_len(nrow(str_df)), function(i){
    str_df[if(i == 1){1}else{1:i}, grep("df", names(str_df))]
  }
)
数据:

基本R解决方案:

# Coerce df vector of data.frame to character, store as new data.frame: str_df => data.frame 
str_df <- transform(df, df = as.character(df))

# Allocate some memory in order to split data into a list:  df_list => empty list
df_list <- vector("list", nrow(str_df))

# Split the string version of the data.frame into a list as required: 
# df_list => list of character vectors
df_list <- lapply(seq_len(nrow(str_df)), function(i){
    str_df[if(i == 1){1}else{1:i}, grep("df", names(str_df))]
  }
)
数据:

您可以尝试使用Lappy:

seqnrowdf在数据中创建一个从1到行数的序列,在本例中为4。functionx部分被称为匿名函数,其中从1到4的每个值都被逐个传递。seq_lenx创建一个从1到x的序列,即在第一次迭代中1到1,在第二次迭代中1到2,依此类推。我们使用这个序列来对数据帧df[seq_lenx,]中的行进行子集划分。因为当我们对数据帧进行子集处理时,它只有一列,所以它会将其更改为向量。为避免添加drop=FALSE。

您可以尝试使用lappy:



seqnrowdf在数据中创建一个从1到行数的序列,在本例中为4。functionx部分被称为匿名函数,其中从1到4的每个值都被逐个传递。seq_lenx创建一个从1到x的序列,即在第一次迭代中1到1,在第二次迭代中1到2,依此类推。我们使用这个序列来对数据帧df[seq_lenx,]中的行进行子集划分。因为当我们对数据帧进行子集处理时,它只有一列,所以它会将其更改为向量。为了避免添加drop=FALSE。

这很有效。非常感谢。实际上我有点挣扎,因为我的数据比一,二,三复杂。例如,其中一行数据包括x+y=2。当我将其转换为as字符时,它以一种奇怪的方式连接,例如c\x+y=2\,\x+y=3\。无需担心,只需选择变量名,例如df$V1。谢谢大家!@别担心,如果我的回答符合你的要求,请接受!这很有效。非常感谢。实际上我有点挣扎,因为我的数据比一,二,三复杂。例如,其中一行数据包括x+y=2。当我将其转换为as字符时,它以一种奇怪的方式连接,例如c\x+y=2\,\x+y=3\。无需担心,只需选择变量名,例如df$V1。谢谢大家!@别担心,如果我的回答符合你的要求,请接受!这很好用。如果我想将另一个数据帧中的一行绑定到这些列表中的每一个,我该怎么做呢?我目前正在使用purr::mapresult,~rbind.,row,但我猜有更好的方法吗?这是一个好方法,或者可以在相同的lappy/map调用中实现。结果啊,完美。我刚刚开始了解lapply是如何工作的。我尝试在该函数的末尾添加,rbinddf,row(在FALSE之后),但没有成功。我想我现在开始更好地理解函数了。非常感谢。如果你不介意的话,你能解释一下这个函数为什么工作吗:functionx df[seq_lenx,drop=FALSE]?我添加了一些关于代码如何工作的解释。我希望这会有帮助。这非常有效。如果我想将另一个数据帧中的一行绑定到这些列表中的每一个,我该怎么做呢?我目前正在使用purr::mapresult,~rbind.,row,但我猜有更好的方法吗?这是一个好方法,或者可以在相同的lappy/map调用中实现。结果啊,完美。我刚刚开始了解lapply是如何工作的。我尝试在该函数的末尾添加,rbinddf,row(在FALSE之后),但没有成功。我想我现在开始更好地理解函数了。非常感谢。如果你不介意的话,你能解释一下这个函数为什么工作吗:functionx df[seq_lenx,drop=FALSE]?我添加了一些关于代码如何工作的解释。我希望这有帮助。
df <- c("one","two","three","four")
df <- as.data.frame(df)
df
result <- lapply(seq(nrow(df)), function(x) df[seq_len(x), , drop = FALSE])
result

#[[1]]
#   df
#1 one

# [[2]]
#   df
#1 one
#2 two

#[[3]]
#     df
#1   one
#2   two
#3 three

#[[4]]
#     df
#1   one
#2   two
#3 three
#4  four