我有一個如下所示的資料框:
BaseRating contRating Participant
5,4,6,3,2,4 5 01
4 4 01
我首先想運行一些代碼來查看資料框中是否有任何逗號,并回傳該位置的列號。我已經嘗試了以下問題中的一些解決方案,在查找逗號而不是字串/整數時似乎不起作用?我可能在這里遺漏了一些簡單的東西,但任何幫助表示贊賞!
根據列中的部分字串匹配選擇資料框行
過濾包含特定字串的行
檢查值是否在資料框中
在確定我的資料中是否有逗號之后,我想只提取串列中由逗號分隔的條目中的最后一個數字,并用該值替換條目。例如,我希望 BaseRating 列中的第一行變為“4”,因為它是該串列中的最后一行。
有沒有辦法在 R 中做到這一點而無需手動更改數字?
uj5u.com熱心網友回復:
一個可能的解決方案:
library(tidyverse)
df <- data.frame(
BaseRating = c("5,4,6,3,2,4", "4"),
contRating = c(5L, 4L),
Participant = c(1L, 1L)
)
df %>%
mutate(BaseRating = sapply(BaseRating,
function(x) str_extract(x, "^\\d $|(?<=\\,)\\d $") %>% as.integer))
#> BaseRating contRating Participant
#> 1 4 5 1
#> 2 4 4 1
或者:
library(tidyverse)
df %>%
separate_rows(BaseRating, sep = ",", convert = TRUE) %>%
group_by(contRating, Participant) %>%
summarise(BaseRating = last(BaseRating), .groups = "drop") %>%
relocate(BaseRating, .before = 1)
#> # A tibble: 2 × 3
#> BaseRating contRating Participant
#> <int> <int> <int>
#> 1 4 4 1
#> 2 4 5 1
uj5u.com熱心網友回復:
如果我們想要一個快速的選項,我們可以使用trimwsfrombase R
df$BaseRating <- as.numeric(trimws(df$BaseRating, whitespace = ".*,"))
-輸出
> df
BaseRating contRating Participant
1 4 5 1
2 4 4 1
或者另一種選擇是 stri_extract_last
library(stringi)
df$BaseRating <- as.numeric(stri_extract_last_regex(df$BaseRating, "\\d "))
資料
df <- structure(list(BaseRating = c("5,4,6,3,2,4", "4"), contRating = 5:4,
Participant = c(1L, 1L)), class = "data.frame", row.names = c(NA,
-2L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420960.html
標籤:
上一篇:將最后的觀察結果向前推進(na.locf?)-但僅當另一列值更改時
下一篇:熊貓:一年中的總天數
