使用 For 循环在 R 中子集数据帧

时间:2021-06-22 21:51:50

标签: r

我在 R 中对我的数据帧进行子集化时遇到问题。我正在尝试使用 for 循环(或任何替代方法)对我的数据进行子集化,其中它由“TNC_DESCRI”分隔

表格示例

enter image description here

但我得到的只是“真”、“假”。我使用其中一个土地覆盖类作为示例,但想对表中的所有土地覆盖类(总共 33 个类)执行此过程:

for (Values in TS.df[3]){
for (j in TS.df[3]=='Sedge meadow complex') {
    print(j)
}}

[1] FALSE [1] FALSE [1] FALSE [1] FALSE [1] FALSE [1] FALSE [1] FALSE [1] FALSE

使用 dput(head(TS.df[1:10,])) 后这是我的数据框的样子:

`structure(list(**OBJECTID** = c(311L, 532L, 1307L, 1439L, 2726L, 
 2960L), **OBJECTID_12_13_14_15_16** = c(145L, 1L, 1L, 1L, 1L, 1L), 
**TNC_DESCRI** = c("Water", "Spruce - fir / feathermoss forest", 
"Spruce - fir / feathermoss forest", "Spruce - fir / feathermoss 
forest", 
"Spruce - fir / feathermoss forest", "Spruce - fir / feathermoss forest"
), **TNC_DESCRI_overlay** = c("Water", "Water", "Spruce - fir / 
feathermoss forest", 
"Spruce - fir / feathermoss forest", "Sedge meadow complex", 
"Spruce - fir / feathermoss forest"), Conversion.1996.2017 = c("Water- 
Water", 
"Spruce - fir / feathermoss forest-Water", "Spruce - fir / feathermoss 
forest-Spruce - fir / feathermoss forest", 
"Spruce - fir / feathermoss forest-Spruce - fir / feathermoss forest", 
"Spruce - fir / feathermoss forest-Sedge meadow complex", 
"Spruce - fir / feathermoss forest-Spruce - fir / feathermoss forest"
), **Change.No.Change** = c("No Change", "Change", "No Change", 
"No Change", "Change", "No Change"), **Edited_overlay** = c("", 
"yes", "", "", "yes", ""), **Edit_Reason_overlay** = c("", "water not 
land", 
"", "", "wetland not upland", ""), **Map_Change_overlay** = c("", 
"map", "", "", "map", ""), **Change_Reason_overlay** = c("", 
"", "", "", "", ""), **Change_Reason_overlay.1** = c("No Change", 
"No Change", "No Change", "No Change", "No Change", "No Change"
), **TCW** = c(NA, -494.21875, -494.21875, -494.21875, -494.21875, 
-494.21875), **TCG** = c(NA, 1599.71875, 1599.71875, 1599.71875, 
1599.71875, 1599.71875), **TCB** = c(NA, 2350.84375, 2350.84375, 
2350.84375, 2350.84375, 2350.84375), **TCW_overlay** = c(NA, 
NA, -341.84, -175.8, NA, -171), **TCG_overlay** = c(NA, NA, 1822.32, 
1167.6, NA, 1600), **TCB_overlay** = c(NA, NA, 2299.68, 1594.6, 
NA, 1939.5), **TCW_Difference** = c(NA, NA, 152.37875, 318.41875, 
NA, 323.21875), **TCG_Difference** = c(NA, NA, 222.60125, -432.11875, 
NA, 0.28125), **TCB_Difference ** = c(NA, NA, -51.1637500000002, 
-756.24375, NA, -411.34375)), **row.names** = c(NA, 6L), class = 
"data.frame")`

我要创建的是类似于下图的土地覆盖类别的子集,其中仅显示具有相同类别的行:

莎草草甸复合体示例

enter image description here

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了这个问题... 您可以先通过

获取土地覆盖类别列表
landcover_class = unique(TS.df$TNC_DESCRI)

然后在 for 循环中使用它

for(i in landcover_class){
    TS.df[TS.df$TNC_DESCRI==i,]
}

然后你会得到每个土地覆盖类的子集数据框