小编jef*_*868的帖子

使用列表基于公共值从data.frame中提取行

我正在寻找一种基于数字序列列表从data.frame过滤行的简单方法.

这是一个例子:

我的初始数据框:

data <- data.frame(x=c(0,1,2,0,1,2,3,4,5,12,2,0,10,11,12,13),y="other_data")
Run Code Online (Sandbox Code Playgroud)

我的列表:

list1 <- list(1:5,10:13)
Run Code Online (Sandbox Code Playgroud)

我的目标是只保留"数据"中的行,这些行包含与"data"的"x"列完全相同的"list1"数字序列.所以输出data.frame应该是:

finaldata <- data.frame(x=c(1:5,10:13),y="other_data")
Run Code Online (Sandbox Code Playgroud)

这样做的任何想法?

filtering r list

7
推荐指数
1
解决办法
171
查看次数

在列表的每个元素上单独应用一个函数

我有一个关于在列表的每个元素上应用函数的问题.

这是我的问题:

我有一个DF列表(我按天划分了一个更大的DF):

 mydf <- data.frame(x=c(1:5), y=c(21:25),z=rnorm(1:5))
 mylist <- rep(list(mydf),5)
 names(mylist) <-c("2006-01-01","2006-01-02","2006-01-03","2006-01-04","2006-01-05") 
Run Code Online (Sandbox Code Playgroud)

如果这些假数据相同,请不要关心这些假数据,这仅仅是为了举例.对于列表的每个DF,我的结果都在列"z"中,而另外两列"x"和"y"表示一些空间坐标.

我有另一个独立的DF,包含一个"x"和"y"的列表,代表一些特定的区域(想象10个区域):

region <- data.frame(x=c(1:10),y=c(21:30),region=c(1:10)) 
Run Code Online (Sandbox Code Playgroud)

最终目标是从每个10个区域得到一个值"z"(我的结果)来自我列表中每个DF的最近点(根据坐标).这意味着对于一个区域:10个结果"z"来自我的列表的DF1,然后10个结果"z"来自DF2,...如果可能的话,我的最终DF应该看起来像这样(对于结构):

final1 <- data.frame("2006-01-01"=rnorm(1:10),"2006-02-01"=rnorm(1:10),
"2006-03-01"=rnorm(1:10),"2006-04-01"=rnorm(1:10),"2006-05-01"=rnorm(1:10))
Run Code Online (Sandbox Code Playgroud)

使用一列一天(列表中的一个DF)和每行一个值(例如2006-01-01:距离第一个区域的最近点的值"z").

我已经有一个小函数来查找最近的值:

min.dist <- function(p, coord){
     which.min( colSums((t(coord) - p)^2) )
}
Run Code Online (Sandbox Code Playgroud)

然后,我正在尝试制作一个循环来获得我想要的东西,但是我对列表有困难.我需要在循环中放入2个变量,但它不起作用.

如果我只列出我的列表中的1 DF,这大致有效:

    for (j in 1:nrow(region)){

imin <- min.dist(c(region[j,1],region[j,2]),mylist[[1]][,1:2])
imin[j] <- min.dist(c(region[j,1],region[j,2]),mylist[[1]][,1:2])
final <- mylist[[1]][imin[j], "z"]
final[j] <- mylist[[1]][imin[j], "z"]
final <- as.data.frame(final)
} 
Run Code Online (Sandbox Code Playgroud)

但是,如果我选择我的整个列表(为了在对象"final"中列表的每个DF有一列结果),我有错误.

我认为第一个问题是"区域"的长度与我列表的长度不同,第二个问题是关于为列表的长度添加第二个变量.我不熟悉循环,所以使用2变量循环.

你能帮助我改变循环中应该改变什么才能拥有我正在寻找的东西吗?

非常感谢你!

for-loop r

2
推荐指数
1
解决办法
9078
查看次数

标签 统计

r ×2

filtering ×1

for-loop ×1

list ×1