拆分柱我有一個「數據」幀,具有多個列,其中之一是「運行時」,這兩種格式具有數據:ř條在數據幀
Runtime
1 h 10 min
67 min
1 h 0 min
86 min
97 min
我要轉換所有這些進入分鐘。試過'strsplit'和'strip_split_fixed'。任何人都可以告訴我一種實現我的目標,分裂或其他方法的方法嗎?
預先感謝您!
拆分柱我有一個「數據」幀,具有多個列,其中之一是「運行時」,這兩種格式具有數據:ř條在數據幀
Runtime
1 h 10 min
67 min
1 h 0 min
86 min
97 min
我要轉換所有這些進入分鐘。試過'strsplit'和'strip_split_fixed'。任何人都可以告訴我一種實現我的目標,分裂或其他方法的方法嗎?
預先感謝您!
這裏是你如何能做到這一個例子:
# setting up your data.frame of interest
df = data.frame(Runtime = c('1 h 10 min', '67 min', '1 h 0 min', '86 min', '97 min'))
df$Runtime = gsub(' min', '', df$Runtime) # remove the min labels
hrs = grepl('h', x = df$Runtime) # which values are in an "x h y min" format?
runtime_sub = sapply(strsplit(df[hrs, 'Runtime'], ' h '), function(i) sum(as.numeric(i) * c(60, 1))) # convert the "x h y min" entries into numeric values in minutes
df$Runtime = as.numeric(df$Runtime) # convert the vector to numeric (yes, it's supposed to return a warning. Ignore it.
df[hrs, 'Runtime'] = runtime_sub # add the converted values
這導致:
Runtime
1 70
2 67
3 60
4 86
5 97
絕對的天才!感謝很多CephBirk –
沒問題kash。無論您發現哪一個答案最有用,您都可以使用綠色選中標記來加註和/或標記。這讓每個人都知道你發現最有用的東西。 – CephBirk
我覺得我看到了這種解決方案的地方。別打我。
df = data.frame(Runtime = c('1 h 10 min', '67 min', '1 h 0 min', '86 min', '97 min'))
df$exp <- gsub("h", "* 60 +", df$Runtime)
df$exp <- gsub("min", "* 1", df$exp)
sapply(df$exp, FUN = function(x) eval(parse(text = x)))
1 * 60 + 10 * 1 67 * 1 1 * 60 + 0 * 1 86 * 1 97 * 1
70 67 60 86 97
你可以得到它使用gsubfn
和正則表達式的一個電話:
library(gsubfn)
gsubfn("^(?:(\\d+)\\s*h)?\\s*(\\d+)\\s*min.*$",
~ sum(as.numeric(x) * 60, as.numeric(y), as.numeric(z), na.rm=TRUE), x)
#[1] "70" "67" "60" "86" "97"
謝謝皮埃爾。這真是令人印象深刻。試圖在另一個問題上實現你的方法,但卡住了。 我有類似的問題,其中,我有像財務價值; 預算:2.00E + 07,7.50E + 07,500000,3.05E + 07。不知道我應該如何修改你的公式以獲得所有10年的 –
財務使用'options(scipen = 15)'。然後再試一次 –
太棒了!感謝名單。如果不是像你這樣的知識海洋,像我們這樣的池塘會枯竭 –
1)讀df[[1]]
,如果第三列是NA,則第一列給出了分鐘;否則,60倍的第一列加上第三列給出了分:
with(read.table(text = as.character(df[[1]]), fill = TRUE),
ifelse(is.na(V3), V1, 60*V1 + V3))
## [1] 70 67 60 86 97
2)一種變化是粘貼「0 h」的每個組件的開頭不具有H給予hm
和讀取計算第一列加上第三列的60倍。
hm <- paste(ifelse(grepl("h", df[[1]]), "", "0 h"), df[[1]])
with(read.table(text = hm), 60 * V1 + V3)
## [1] 70 67 60 86 97
它目前是字符串嗎?還是一個因素? – CephBirk
這不是R輸出。你能爲你的例子提供實際的R代碼嗎?這避免了「哦,你的解決方案適用於我的例子,但不是我的實際數據」 –