Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Variables_Dataframe - Fatal编程技术网

在R循环中访问变量数据帧

在R循环中访问变量数据帧,r,loops,variables,dataframe,R,Loops,Variables,Dataframe,如果我在循环中使用数据帧,如何使用可变数据帧名称(另外还有可变列名)来访问数据帧内容 dfnames <- c("df1","df2") df1 <- df2 <- data.frame(X = sample(1:10),Y = sample(c("yes", "no"), 10, replace = TRUE)) for (i in seq_along(dfnames)){ curr.dfname <- dfnames[i] #how can I

如果我在循环中使用数据帧,如何使用可变数据帧名称(另外还有可变列名)来访问数据帧内容

dfnames <- c("df1","df2")

df1 <- df2 <- data.frame(X = sample(1:10),Y = sample(c("yes", "no"), 10, replace = TRUE))

for (i in seq_along(dfnames)){
    curr.dfname <- dfnames[i]

    #how can I do this:
    curr.dfname$X <- 42:52

    #...this
    dfnames[i]$X <- 42:52

    #or even this doubly variable call
    for (j in 1_seq_along(colnames(curr.dfname)){
        curr.dfname$[colnames(temp[j])] <- 42:52
    }
}
dfnames您可以使用
get()
根据变量名称的字符串返回变量引用:

> x <- 1:10
> get("x")
[1]  1  2  3  4  5  6  7  8  9 10
但我真的认为这将是一个痛苦的过程。正如评论者所说,如果您可以将数据帧放入一个列表中,然后对其进行迭代,那么它的性能可能会更好,可读性也会更好。不幸的是,据我所知,
get()
不是矢量化的,因此,如果您只有数据帧名称的字符串列表,则必须遍历该列表才能获得数据帧列表:

# build data frame list
df.list <- list()
for (i in 1:length(dfnames))
{
    df.list[[i]] <- get(dfnames[i])
}

# iterate through data frames
for (cur.df in df.list)
{
    cur.df$X <- 42:52
}
这将返回修改的数据帧列表(尽管您可以使用
map()
map\u-dfr()
map\u-dfc()的变体)
,分别按行或列自动绑定已处理数据帧列表。前者使用列名而不是列位置进行连接,还可以使用
.ID
参数和输入列表的名称添加ID列。因此,它在
lappy()上添加了一些不错的功能

您可以使用
get()
根据变量名称的字符串返回变量引用:

> x <- 1:10
> get("x")
[1]  1  2  3  4  5  6  7  8  9 10
不过,我真的认为这将是一种痛苦的方法。正如评论员所说,如果你能将数据帧放入一个列表中,然后进行迭代,它可能会执行得更好,可读性更强。不幸的是,
get()据我所知,
不是矢量化的,因此,如果您只有数据帧名称的字符串列表,则必须遍历该列表才能获得数据帧列表:

# build data frame list
df.list <- list()
for (i in 1:length(dfnames))
{
    df.list[[i]] <- get(dfnames[i])
}

# iterate through data frames
for (cur.df in df.list)
{
    cur.df$X <- 42:52
}

这将返回修改的数据帧列表(尽管您可以使用
map()
map\u-dfr()
map\u-dfc()的变体)
,分别按行或列自动绑定已处理数据帧列表。前者使用列名而不是列位置进行连接,还可以使用
.ID
参数和输入列表的名称添加ID列。因此,它在
lappy()上添加了一些不错的功能

将两个数据帧放在一个命名列表中。@joran,比如,
dflistNo.list(df1=df1,df2=df2),您可以使用[[按名称或位置访问。您应该阅读列表。将两个数据帧放在一个命名列表中。@joran,比如,
dflistNo.list(df1=df1,df2=df2),您可以使用[[按名称或位置访问。您应该阅读列表。这是一个有用的答案!我如何取消在函数中操作的数据帧的列表?(注意:一些数据帧本身包含列表,因此
list2env(cur.df,.GlobalEnv)
会有问题。)我绝对不会再这样做了!给我半个小时找点早餐,我会给你一个更现代的答案?那太棒了!这100%适用于我现在所做的:)我已经在我的答案的末尾弹出了:)非常感谢!因此,数据帧中的许多列都是唯一的,需要单独处理-但是变量的一些转换是相同的,这就是为什么我试图编写此函数。我正在努力分别提取列表中的
df
,即返回到
df1
,df2`是单独的。您认为呢我知道怎么做吗?这是一个很有帮助的答案!我如何取消列出在函数中操作的数据帧?(注意:一些数据帧本身包含列表,因此
list2env(cur.df,.GlobalEnv)
会有问题。)我绝对不会再这样做了!给我半个小时找点早餐,我会给你一个更现代的答案?那太棒了!这100%适用于我现在正在做的事情:)我在我的答案末尾弹出了:)太感谢了!所以,数据框中的许多列都是独特的,需要单独处理-但是变量的某些转换是相同的,这就是我试图编写此函数的原因。我正在努力逐个提取列表中的
df
,即返回到
df1
,df2`是分开的。你知道怎么做吗?