【问题标题】:subset a dataframe with character string R [duplicate]使用字符串 R 子集数据帧 [重复]
【发布时间】:2021-12-01 16:50:05
【问题描述】:

我正在尝试通过在数据框的一列中选择字符串条件来子集数据框。这应该是一个简单的任务,我看到它以前被问过很多次,但我完全卡住了

下面的数据框示例

structure(list(Analyte = c("Fe", "SiO2", "Al2O3", "TiO2", "Zr"
), Category = c("Certified", "Certified", "Certified", "Certified", 
"Informational"), AssignedValue = c("57.2", "6.7497718955", "2.8925", 
"0.146635643433333", "0.00393333333333333"), Uncertainty = c("0.0587455625228403", 
"0.0164487575063948", "0.0114603084512766", "0.00242243266797717", 
NA), CILower = c("57.0448631590115", "6.67853259277291", "2.82556340328344", 
"0.141155720022072", "0.00289242352888054"), CIUpper = c("57.4618035076551", 
"6.83390972656042", "2.93457675661656", "0.152115566844594", 
"0.00497424313778613"), labCV.all = c("0.515527815366847", "1.64892092489221", 
"2.51730947074656", "5.4795936391998", "22.5584788355489"), totalSamples = c("65", 
"65", "65", "65", "36"), NoLabs = c("10", "10", "10", "10", "5"
), Sy = c("0.291421208884417", "0.108601127975891", "0.0761950799826298", 
"0.00766040470920629", NA), Uchar = c("0.0921554778554455", "0.0343426920867249", 
"0.0240949999243813", "0.00242243266797717", "0.0003749073959734"
)), row.names = c(1L, 2L, 3L, 4L, 24L), class = "data.frame")

我已经尝试了以下

df2 <- df[df$Category == "Certified"]

但是新数据框 df2 与旧数据框相同。

我认为这与 dataframe 是从 cbind 在一起的 dataframes 列表派生的事实有关,并且结构不太正确?

当我检查数据类型 typeof(df) 我得到列表

我尝试了许多不同的方法来转换为数据框,但没有任何区别。

【问题讨论】:

    标签: r dataframe subset cbind


    【解决方案1】:

    你需要一个逗号:

    df[df$Category == "Certified",]
    

    尾随逗号确定您正在按行对数据框进行子集。

    没有逗号,您可以对列进行子集化,正如您所看到的,因为通过混合行子集和列子集,Sy 列在没有逗号的情况下被删除。

    没有尾随逗号将表达式转换为按列:

    df[, df$Category == "Certified"]
    

    因此,做:

    > all(df[df$Category == "Certified"] == df[, df$Category == "Certified"], na.rm=T)
    [1] TRUE
    > 
    

    会给TRUE注意我使用na.rm,这样它就不会变成NA

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 2022-11-04
      • 2016-04-23
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多