下面的简化代码连接所有myData
数据帧列,除了元素R,只有当数据帧中有多个R元素时,元素R才会连接;如果元素列中只有一个R,则显示单个R而不连接当数据帧的Element列中没有R元素时,代码也应该工作,但它不工作。
以下是在存在两个R元素且仅存在一个R元素的情况下运行代码时的正确输出——
具有两个R元素:
Element Group ElementCnt finalCode
1 C 4 1 C.4.1
2 R 0 1 R.0.1
3 C 1 2 C.1.2
4 D 3 1 D.3.1
5 C 8 3 C.8.3
6 R 5 2 R.5.2
带有一个R元素:
Element Group ElementCnt finalCode
1 C 4 1 C.4.1
2 R 0 1 R
3 C 1 2 C.1.2
4 D 3 1 D.3.1
5 C 8 3 C.8.3
在名为rCount
的代码中创建的对象显示R元素在myData
的元素列中出现的次数。当我在数据帧中不存在R元素的情况下运行代码时,代码会崩溃。我试着用ifelse(Element == "R" & nrow(rCount) > 0 & rCount$counted == 1
行来解决这个场景,但它不起作用。
如何正确测试条件语句中的行数,以便代码在没有R元素的场景中正确运行?
简化代码,显示了各种myData
数据帧,可轻松运行2/1/0R元素场景:
library(dplyr)
# Two R elements present
myData <-
data.frame(
Element = c("C","R","C","D","C","R"),
Group = c(4,0,1,3,8,5)
)
# One R element present
myData <-
data.frame(
Element = c("C","R","C","D","C"),
Group = c(4,0,1,3,8)
)
# No R elements present
myData <-
data.frame(
Element = c("C","C","D","C"),
Group = c(4,1,3,8)
)
# Code:
rCount <- myData %>% filter(Element == 'R') %>% count(Element, name = 'counted')
seqLabel <- myData %>%
group_by(Element) %>%
mutate(ElementCnt = row_number()) %>%
ungroup() %>%
mutate(finalCode =
ifelse(Element == "R" & nrow(rCount) > 0 & rCount$counted == 1,
Element,
paste(Element, Group, ElementCnt,sep = '.')
)
)
print.data.frame(seqLabel)
总之,以下是上述数据帧所需的输出——
两个";R〃;myData
数据帧的元素列中的元素(上面的代码做得很好(:
Element Group ElementCnt finalCode
1 C 4 1 C.4.1
2 R 0 1 R.0.1
3 C 1 2 C.1.2
4 D 3 1 D.3.1
5 C 8 3 C.8.3
6 R 5 2 R.5.2
";R〃;myData
数据帧的元素列中的元素(上面的代码做得很好(:
Element Group ElementCnt finalCode
1 C 4 1 C.4.1
2 R 0 1 R
3 C 1 2 C.1.2
4 D 3 1 D.3.1
5 C 8 3 C.8.3
否";R〃;myData
数据帧的Elements列中的元素(上面的代码崩溃,但这是我希望看到的输出(:
Element Group ElementCnt finalCode
1 C 4 1 C.4.1
2 C 1 2 C.1.2
3 D 3 1 D.3.1
4 C 8 3 C.8.3
您可以在分组内进行计算。你的方法的问题是,当没有R时,它会返回一些空的东西。你可以检查一下以避免错误,但我相信这更清楚、更有效:
myData |>
group_by(Element) |>
mutate(ElementCnt = row_number(),
finalCode = ifelse(Element == "R" & n() == 1, Element, paste(Element, Group, ElementCnt, sep = "."))) |>
ungroup()
输出:
# A tibble: 6 × 4
Element Group ElementCnt finalCode
<chr> <dbl> <int> <chr>
1 C 4 1 C.4.1
2 R 0 1 R.0.1
3 C 1 2 C.1.2
4 D 3 1 D.3.1
5 C 8 3 C.8.3
6 R 5 2 R.5.2
# A tibble: 5 × 4
Element Group ElementCnt finalCode
<chr> <dbl> <int> <chr>
1 C 4 1 C.4.1
2 R 0 1 R
3 C 1 2 C.1.2
4 D 3 1 D.3.1
5 C 8 3 C.8.3
# A tibble: 4 × 4
Element Group ElementCnt finalCode
<chr> <dbl> <int> <chr>
1 C 4 1 C.4.1
2 C 1 2 C.1.2
3 D 3 1 D.3.1
4 C 8 3 C.8.3
30/jul:用正确的输出更新并删除对OP的误解。