【发布时间】:2021-12-17 00:10:55
【问题描述】:
我想遍历数据框中的列(从左到右)并找到每行中等于 1 的第一个值。如果该值等于 1,那么我想在数据框中添加一个名为 x_time = 9,10,11,12 或 13 的新列,具体取决于首先找到值 1 的时间点。
查看数据示例
df <- data.frame(x9 = c('$7', '$7', 2, '$7', 1, '$7'),
x10 = c('$7', 1, '$7', '$7', '$7', '$7'),
x11 = c('$7', '$7', 2, '$7', 1, '$7'),
x12 = c(1, 1, 2, '$7', '$7', '$7'),
x13 = c('$7', '$7', 2, '$7', 2, '$7'))
Desired output:
x9 x10 x11 x12 x13 x_time
1 $7 $7 $7 1 $7 12
2 $7 1 $7 1 $7 10
3 2 $7 2 2 2 NA
4 $7 $7 $7 $7 $7 NA
5 1 $7 1 $7 2 9
6 $7 $7 $7 $7 $7 NA
请让我知道最充分的方法。
在 Stata 中,我只需要创建一个全局宏并循环遍历其内容:
global varlist “x09 x10 x11 x12 x13”
gen x_time = .
foreach var in $varlist {
replace x_time = substr("`var'",-2,.) if x_time == . & `var' == 1
}
【问题讨论】:
-
您必须编辑您的 df 和所需的输出。第三行不正确。
-
我做了,谢谢指出。
-
顺便说一句,您在 Stata 中使用全局宏既不是必要的,也不是好的做法。只是循环
foreach var in x09 x10 x11 x12 x13将是其他几种解决方案之一。