【问题标题】:R How to replace value of a variable conditionallyR如何有条件地替换变量的值
【发布时间】:2015-09-15 05:04:00
【问题描述】:

我确信这个问题已经被问了很多时间,但我找不到解决方案。

我正在尝试根据第一个变量的值有条件地替换第二个变量的值。这是数据。

 MAKE Continent
1  HOLDEN        US
2  HOLDEN        US
3    FORD        US
4    FORD        US

if(gsample$MAKE == "HOLDEN") gsample$Continent = "AUS"

警告信息:

In if (gsample$MAKE == "HOLDEN") gsample$Continent = "AUS" :
  the condition has length > 1 and only the first element will be used

【问题讨论】:

  • 您可以使用矢量化的ifelse,即with(gsample, ifelse(MAKE=='HOLDEN', 'AUS', Continent))或只是gsample$Continent[gsample$MAKE=='HOLDEN'] <- 'AUS'(假设该列是character类)。或者使用data.table 的快速选项是library(data.table);setDT(gsample)[MAKE=='HOLDEN', Continent:= 'AUS']
  • gsample$Continent <- ifelse(gsample$MAKE == "HOLDEN", "AUS", gsample$Continent)
  • 谢谢 Avinash Raj 和 akrun。

标签: r if-statement


【解决方案1】:

基于逻辑条件MAKE=='HOLDEN',如果条件为TRUE,我们使用ifelse返回'AUS',否则返回'Continent'的对应值。

gsample$Continent <- with(gsample, ifelse(MAKE=='HOLDEN', 'AUS', Continent))

或者我们使用逻辑索引对“大陆”进行子集化,并通过分配替换它。

gsample$Continent[gsample$MAKE=='HOLDEN'] <- 'AUS'

或者我们可以使用data.table。我们将“data.frame”转换为“data.table”(setDT(gsample)),根据i 中的逻辑条件,我们将(:=)大陆分配给“AUS”

library(data.table)
setDT(gsample)[MAKE=='HOLDEN', Continent:= 'AUS']

注意:我们假设“大陆”列是character 类。

【讨论】:

    【解决方案2】:
    gsample$Continent <- ifelse(gsample$MAKE == "HOLDEN", "AUS","US")
    

    【讨论】:

      【解决方案3】:

      假设您要根据另一列中的值更改某一列的值。使用以下;

      df$Continent[df$MAKE == 'HOLDEN'] <- 'AUS'
      

      这将非常快速地复制数据帧中的所有值。

      【讨论】:

      • 这取决于Continent 列是字符而不是因子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2021-02-22
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2020-02-10
      相关资源
      最近更新 更多