R语言 如何使用if语句的结果填充数据集中的列[已关闭]

jjhzyzn0  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(97)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
15小时前关门了。
Improve this question
有效的代码在这个问题的底部以及答案中。
我想写一个代码,它将运行我的数据集“top.table”中的每个miRNA,然后返回每个miRNA的logFC和P值是否上调或下调或不显著。
如果logFC大于0.6且P.值小于0.05,则这将是“上调”。如果logFC小于-0.6且P值小于0.05,则这将是“下调”。如果这两个条件都不满足,这些将是微不足道的
然后,我想把这些结果添加到我的数据框架df中,我希望使用cbind将其添加到top.table数据集
top.table的列名为:

"miRNA"  "logFC"  "AveExpr"  "t"  "P.Value"  "adj.P.Val"  "B"

字符串
在这个数据集中,我有1068个miRNA需要单独检查
我试图在这个表中创建一个名为Up_Down.Regulated的新列,以便更容易地可视化结果。我试过运行这个代码

df <- data.frame((matrix(nrow =1068, ncol = 1)), row.names = rownames(top.table))
colnames(df) <- "Up_Down.Regulated"
colnames(df)
colnames(top.table)
for (miRNA in top.table) {}
  if (top.table$logFC > 0.6 & top.table$P.Value < 0.05){
    df$Up_Down.Regulated == "UP"
  } else if (top.table$logFC < -0.6 & top.table$P.Value < 0.05){
      df$Up_Down.Regulated == "DOWN"
  }else {df$Up_Down.Regulated == "NonSig"
      }

  Error in if (top.table$logFC > 0.6 & top.table$P.Value < 0.05) { : 
  the condition has length > 1


我希望代码做的是遍历top.table数据集中的每个miRNA,然后返回miRNA是否上调或下调或不显著,然后我希望将这些结果添加到我的数据框架df中,我希望使用cbind将其添加到top.table数据集
这是在不创建数据集的情况下工作的代码,并直接将额外的列添加到我的原始数据集,谢谢Andre维尔德贝格:

library(dplyr)

top.table %>% 
  mutate(Up_Down.Regulated = case_when(
                  logFC > 0.6 & P.Value < 0.05 ~ "UP", 
                  logFC < -0.6 & P.Value < 0.05 ~ "DOWN", 
                  TRUE ~ "NonSig"))

yxyvkwin

yxyvkwin1#

如果结果是一个向量,则使用ifelse而不是if(这是错误试图说的)。最重要的是,使用dplyr s case_when可以避免嵌套else if

library(dplyr)

top.table %>% 
  mutate(Up_Down.Regulated = case_when(
                  logFC > 0.6 & P.Value < 0.05 ~ "UP", 
                  logFC < -0.6 & P.Value < 0.05 ~ "DOWN", 
                  TRUE ~ "NonSig"))

字符串
注:未测试,因为没有发布示例

lc8prwob

lc8prwob2#

这不再是我得到的错误消息。我看到:
错误:未找到对象'logFC'
在R中,列名不是一级对象。它们不在符号表中,除非你附加包含它们的 Dataframe ,通常这样做不是一个好主意。此外,在这种情况下这样做不会成功,因为该 Dataframe 中只有一列。
代码和问题中有太多不同的错误,很难弄清楚首先要纠正什么。回到问题本身,它没有列出一个目标和预期的输入类型以及被认为是正确的输出类型。此外,构建的 Dataframe 比需要的要大得多。您也没有调整代码来纠正到目前为止指出的所有错误。所以我建议你多花点时间看看如何写好问题的帮助材料。你会在https://stackoverflow.com/help/how-to-ask找到很多价值。

相关问题