Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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/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
使用for循环分解数据帧_R_Loops_For Loop_Dataframe - Fatal编程技术网

使用for循环分解数据帧

使用for循环分解数据帧,r,loops,for-loop,dataframe,R,Loops,For Loop,Dataframe,我有一个类似的数据集: city var value a var1 0.19 b var1 0.67 c var1 0.19 a var2 0.14 b var2 0.38 c var2 0.27 a var3 0.59 b var3 0.42 c var3 0.27 a var4 0.28 b va

我有一个类似的数据集:

   city var value
    a   var1    0.19
    b   var1    0.67
    c   var1    0.19
    a   var2    0.14
    b   var2    0.38
    c   var2    0.27
    a   var3    0.59
    b   var3    0.42
    c   var3    0.27
    a   var4    0.28
    b   var4    0.37
    c   var4    0.91
我需要创建城市b与其他城市的不同数据帧(例如,城市b与城市a、城市b与城市c等)。对于我稍后所做的一些代数运算,城市b在所有变量中首先出现是非常重要的

示例城市b和城市a:

city    var value
b   var1    0.67
a   var1    0.19
b   var2    0.38
a   var2    0.14
b   var3    0.42
a   var3    0.59
b   var4    0.37
a   var4    0.28
示例城市b和城市c:

city    var value
b   var1    0.67
c   var1    0.19
b   var2    0.38
c   var2    0.27
b   var3    0.42
c   var3    0.27
b   var4    0.37
c   var4    0.91
我尝试了以下(我的第一个循环之一),但没有成功:

for (i in unique(df$city)) {
  paste0("cityb",i) <- (df[df$city %in% c("cityb", "i"), ])
}
for(唯一的i(df$city)){
paste0(“cityb”,i)给你:

步骤1:重新创建数据

dat <- read.table(text="
city var value
a   var1    0.19
b   var1    0.67
c   var1    0.19
a   var2    0.14
b   var2    0.38
c   var2    0.27
a   var3    0.59
b   var3    0.42
c   var3    0.27
a   var4    0.28
b   var4    0.37
c   var4    0.91
", header=TRUE)
步骤3:使用
lappy
创建数据帧列表。传递给
lappy
的函数创建子集(使用与您在问题中尝试的逻辑类似的逻辑),然后使用
order()
函数对其排序:

lapply(
  setdiff(levels(dat$city), "b"),
  function(i){
    ret <- dat[dat$city %in% c("b", i), ]
    ret[order(ret$var, ret$city), ]
  })

如果
city
列不是
factor
,您可以执行:(对
Andrie的
代码进行轻微修改:

lst <- lapply(letters[c(1, 3)], function(i) {
x1 <- rbind(dat[dat$city == "b", ], dat[dat$city == i, ])
indx <- seq(1, nrow(x1), by = 4) + rep(0:3, each = 2)
x1[indx, ]
}), paste0("dat", 1:2))

list2env(lst, envir=.GlobalEnv)
#<environment: R_GlobalEnv>

 str(dat1)
 #'data.frame': 8 obs. of  3 variables:
 #$ city : chr  "b" "a" "b" "a" ...
 #$ var  : chr  "var1" "var1" "var2" "var2" ...
 #$ value: num  0.67 0.19 0.38 0.14 0.42 0.59 0.37 0.28
 str(dat2)
 # 'data.frame':    8 obs. of  3 variables:
 # $ city : chr  "b" "c" "b" "c" ...
 # $ var  : chr  "var1" "var1" "var2" "var2" ...
 # $ value: num  0.67 0.19 0.38 0.27 0.42 0.27 0.37 0.91

lst@user3507584没有理由“将[[i]]中的每一个都保存为不同的数据帧”。很高兴它们都很好地列在一个列表中,这使得使用它们更加方便。这不起作用,因为
paste
没有
paste0(“cityb”,i)的赋值方法嗨,Akrun,Andie的代码很好用,但是你知道如何将每一对城市保存为数据框吗?嗨
user3507584
。我编辑了代码。请检查这是否是你想要的。
[[1]]
   city  var value
2     b var1  0.67
1     a var1  0.19
5     b var2  0.38
4     a var2  0.14
8     b var3  0.42
7     a var3  0.59
11    b var4  0.37
10    a var4  0.28

[[2]]
   city  var value
2     b var1  0.67
3     c var1  0.19
5     b var2  0.38
6     c var2  0.27
8     b var3  0.42
9     c var3  0.27
11    b var4  0.37
12    c var4  0.91
lst <- lapply(letters[c(1, 3)], function(i) {
x1 <- rbind(dat[dat$city == "b", ], dat[dat$city == i, ])
indx <- seq(1, nrow(x1), by = 4) + rep(0:3, each = 2)
x1[indx, ]
}), paste0("dat", 1:2))

list2env(lst, envir=.GlobalEnv)
#<environment: R_GlobalEnv>

 str(dat1)
 #'data.frame': 8 obs. of  3 variables:
 #$ city : chr  "b" "a" "b" "a" ...
 #$ var  : chr  "var1" "var1" "var2" "var2" ...
 #$ value: num  0.67 0.19 0.38 0.14 0.42 0.59 0.37 0.28
 str(dat2)
 # 'data.frame':    8 obs. of  3 variables:
 # $ city : chr  "b" "c" "b" "c" ...
 # $ var  : chr  "var1" "var1" "var2" "var2" ...
 # $ value: num  0.67 0.19 0.38 0.27 0.42 0.27 0.37 0.91