R中列的条件重新编码
Conditional recoding of columns in R
我有一个数据集,看起来非常简陋(实际上要大得多)
frequency unit
500 3
2 1
400 3
4 1
15 2
单位列显示频率是按 1=周、2=月还是 3=年测量的。
我想做的是重新编码频率(到同一行甚至新行),这样我就可以将所有频率都放在同一个单位中(例如,将 15 除以 4,将 400 除以 52,这样一切都是以周为单位)。
我实际上尝试了很多东西,例如:
data$frequency[data$unit == 2] <- data$frequency*0,25
但这并不像预期的那样工作...因为它将频率列的第一个数字 (500) 乘以 0,25 并显示它...而不是使用同一行中的数字(15).
frequency unit
500 3
2 1
400 3
4 1
125 2
而不是...
frequency unit
500 3
2 1
400 3
4 1
3.75 2
我想看什么
有谁知道如何处理这个问题吗?...真的很棒:)
关于@DavidArenburg 和@BondedDust 的评论,这里有两种方法:
data <- read.table(header = TRUE,
stringsAsFactors = FALSE,
sep = ";",
text = "
frequency;unit;unit2
500;3;three
2;1;one
400;3;three
4;1;one
15;2;two")
(data$freqNew <- data$frequency / c("one" = 1, "two" = 4, "three" = 52)[data$unit2])
# 3 1 3 1 2
# 9.615385 2.000000 7.692308 4.000000 3.750000
data$frequency / c(1, 4, 52)[data$unit]
# [1] 9.615385 2.000000 7.692308 4.000000 3.750000
我有一个数据集,看起来非常简陋(实际上要大得多)
frequency unit
500 3
2 1
400 3
4 1
15 2
单位列显示频率是按 1=周、2=月还是 3=年测量的。
我想做的是重新编码频率(到同一行甚至新行),这样我就可以将所有频率都放在同一个单位中(例如,将 15 除以 4,将 400 除以 52,这样一切都是以周为单位)。
我实际上尝试了很多东西,例如:
data$frequency[data$unit == 2] <- data$frequency*0,25
但这并不像预期的那样工作...因为它将频率列的第一个数字 (500) 乘以 0,25 并显示它...而不是使用同一行中的数字(15).
frequency unit
500 3
2 1
400 3
4 1
125 2
而不是...
frequency unit
500 3
2 1
400 3
4 1
3.75 2
我想看什么
有谁知道如何处理这个问题吗?...真的很棒:)
关于@DavidArenburg 和@BondedDust 的评论,这里有两种方法:
data <- read.table(header = TRUE,
stringsAsFactors = FALSE,
sep = ";",
text = "
frequency;unit;unit2
500;3;three
2;1;one
400;3;three
4;1;one
15;2;two")
(data$freqNew <- data$frequency / c("one" = 1, "two" = 4, "three" = 52)[data$unit2])
# 3 1 3 1 2
# 9.615385 2.000000 7.692308 4.000000 3.750000
data$frequency / c(1, 4, 52)[data$unit]
# [1] 9.615385 2.000000 7.692308 4.000000 3.750000