【问题标题】:For Loop to rename objects in a data frame (+ ignore NA) in RFor循环在R中重命名数据框中的对象(+忽略NA)
【发布时间】:2021-03-18 15:09:59
【问题描述】:

我有一个数据框,其中包含一个包含二进制变量(指向或广泛)的列。为了进行计算,我需要将它们替换为 0 或 1。我想编写一个 for 循环来为我执行此操作。

我的代码:

binary_To_Number<-function(df)
{
 for(i in df)
   {
      if(i=="pointed")
        {
          i<-1
        }
      else if(i=="broad")
        {
          i<-0
        }
      else if(is.na(i))
        {
          print("NA")
        }
      else
        {
          
        }
    }
}

binary_To_Number(town$shape)

我尝试使用这段代码。我的第一个问题是我不知道如何保存结果。所以我的代码暂时更改了 i 但不会将其保存在 df.xml 中。我知道你可以创建一个空的存储向量来存储结果,但是我可以立即替换我的 df 中的变量吗?
第二个问题是,如果涉及到包含 NA 的 i,我的代码会停止并给我一条错误消息。

Error in if (i == "pointed") { : missing value where TRUE/FALSE needed

有什么我可以做的,还是我需要先用占位符替换 NA?

【问题讨论】:

  • R 的优点是已经内置了修改向量的方法,例如town$shape[town$shape=="pointed"] &lt;- 1.

标签: r dataframe for-loop


【解决方案1】:

您也可以使用 dplyr(确保 0 表示未指向):

library(dplyr)
df <- df %>% 
  mutate(
    isPointed = as.integer(tolower(shape) == 'pointed')
  )

输出:

    shape isPointed
1 Pointed         1
2   broad         0
3 pointed         1

我使用的数据框:

df <- data.frame(
  shape = c('Pointed', 'broad', 'pointed'),
  stringsAsFactors = FALSE
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2012-12-06
    • 2011-10-29
    • 2020-04-10
    • 2014-11-22
    相关资源
    最近更新 更多