如何有选择地乘以列

时间:2019-07-04 12:12:22

标签: r dataframe

我有两列显示公交车站到一个人家的距离。一个是数字,另一个是单位(块或分钟)。我想将块转换为分钟。所以我认为每个街区都是2分钟(是吗?)。我想将第一列中的所有数字乘以2,其单位为块。这是一个示例:

TOBUS     TOBUSU
  2     (1) Block
  3      (1) Block
  5        minutes
  4       (1) Block
  2        minutes

在上面的示例中,我将拥有

TOBUS     TOBUSU
  4       minutes
  6        minutes
  5        minutes
  8        minutes
  2        minutes

3 个答案:

答案 0 :(得分:2)

一种方法是:

# df is your data.frame
df$TOBUS[df$TOBUSU=="(1) Block"] <- df$TOBUS[df$TOBUSU=="(1) Block"] * 2
df$TOBUSU[df$TOBUSU=="(1) Block"] <- "minutes"

答案 1 :(得分:1)

提取圆括号之间的数字并乘以TOBUS

vals <- df$TOBUS * as.integer(sub("\\((\\d+)\\).*", "\\1", df$TOBUSU)) * 2
df$TOBUS[!is.na(vals)] <- vals[!is.na(vals)]
df$TOBUSU <- "minutes"

df
#  TOBUS  TOBUSU
#1     4 minutes
#2     6 minutes
#3     5 minutes
#4     8 minutes
#5     2 minutes

答案 2 :(得分:1)

df$TOBUS <- ifelse(df$TOBUSU == "(1) Block", df$TOBUS * 2, df$TOBUS)
df$TOBUSU <- "minutes"

#Output
TOBUS  TOBUSU
4      minutes
6      minutes
5      minutes
8      minutes
2      minutes