我有一个数据框,其中每一行应主要包含“无响应”值(-1)。我想获取不是的每一行的第一个值-1,最好使用整洁的东西。
# A tibble: 3,222 x 10
tracc1 tracc2 tracc3 tracc4 tracc5 tracc6 tracc7 tracc8 tracc9 tracc10
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 -1 -1 -1 -1 -1 7 -1 -1 -1
2 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
3 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
4 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
5 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
6 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
7 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
8 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
9 -1 -1 3 -1 -1 -1 -1 -1 -1 -1
10 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
# ...
Run Code Online (Sandbox Code Playgroud)
我曾经能够dpylr::unite组合所有列,但是当单个行具有多个有效响应时会出现问题。在以下示例中,第一行应屈服1而不是17。
> df %>%
mutate_at(vars(starts_with("tracc")),
function(t) {if_else(t < 0,"",t)}) %>%
unite("tracc",starts_with("tracc"),sep = "", na.rm = TRUE)
# A tibble: 3,222 x 1
tracc
<chr>
1 17
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 3
10 1
# ...
Run Code Online (Sandbox Code Playgroud)
试试这个简单的代码:
apply(df, 1, function(x) x[x != -1][1])
Run Code Online (Sandbox Code Playgroud)
它并行地应用于每一行。
一种dplyr选择是:
df %>%
mutate_all(~ replace(., . == "-1", NA_integer_)) %>%
transmute(tracc = coalesce(!!!.))
tracc
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 3
10 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |