【问题标题】:creating dataset if statement创建数据集 if 语句
【发布时间】:2014-09-24 23:21:50
【问题描述】:

我是社区的新手,对 r 也是如此。这是我的数据集的一个示例部分:

brettcontrol <- data.frame(rep.sw=c(NA,"sw","rep","sw"), RT=c(1:4) )
brettcontrol

  rep.sw RT
1   <NA>  1
2     sw  2
3    rep  3
4     sw  4

因此,如果您看到rep.sw 下的一些值是"sw""rep"。我要做的是创建一个 if 语句,上面写着if rep.sw = 'sw' then...,它将所有RT 值放入一个名为sw 的数据框中,如果rep.sw = "rep" 它会将所有RT 值放入一个名为rep的数据框。

任何帮助将不胜感激! :)

一切顺利, 布雷特

编辑:我按照 DMT 的建议做了,效果很好!之后我只使用了 na.omit(sw) 命令,这样我就可以为每个组运行平均值和 SD!感谢大家的帮助!

【问题讨论】:

  • 为什么是 if 语句?您可以在一个步骤中根据rep.sw 中的特定值对数据框进行子集化
  • 正如@rawr 所建议的,您可以轻松地完成sw &lt;- brettcontrol[brettcontrol$rep.sw=="sw",]sw &lt;- subset(brettcontrol, rep.sw == "sw") - 我建议您阅读以下教程网站:statmethods.net/management/subset.html
  • 是的,那是我的无知。谢谢你让我直截了当。 :)

标签: r if-statement dataframe


【解决方案1】:

不确定生成的数据框的形式(它们是否只是一列?或者它们已经存在?)但这是获取所需值的一种方法

sw<-brettcontrol$RT[brettcontrol$rep.sw=="sw"]
rep<-brettcontrol$RT[brettcontrol$rep.sw=="rep"]

其中 sw 和 rep 是向量,可以随意将它们转换为数据帧或随意使用

【讨论】:

  • thelatemail 4 秒搞定!我的只是添加 $RT 来专门提取这些值
【解决方案2】:

试试splitlist2env

它会为全局环境分配两个新的数据框repsw,而NA会在split中被移除。

> ls()
# [1] "brettcontrol"
> list2env(split(brettcontrol[-1], brettcontrol$rep.sw), .GlobalEnv)
> ls()
# [1] "brettcontrol" "rep"          "sw"        
> rep
#   RT
# 3  3
> sw
#   RT
# 2  2
# 4  4

【讨论】:

    【解决方案3】:

    试试:

    swdf = data.frame(brettcontrol[brettcontrol$rep.sw=="sw",][,-1])
    names(swdf) = 'sw_RT'
    repdf = data.frame(brettcontrol[brettcontrol$rep.sw=="rep",][,-1])
    names(repdf) = 'rep_RT'
    
    > swdf
      sw_RT
    1    NA
    2     2
    3     4
    
    > repdf
      rep_RT
    1     NA
    2      3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多