簡體   English   中英

使用 R 將“84+3”等字符轉換為數值變量

[英]Convert characters like "84+3" into numeric variables using R

我有一個很大的data.frame有幾個變量,如“89+2”(所有兩位整數 + 一位整數),我正在嘗試快速轉換為數字變量。 實際上,要么只是消除第二個數字,要么執行計算並將它們加在一起就行了……有點像 R 新手。 任何幫助表示贊賞。

例子:

df$LM = c("91+2", "89+3", "88+2")

尋找

df$LM_num = c(91, 89, 88)

或者

df$LM_num = c(93, 92, 90)

我們可以separate使用

library(tidyr)
library(dplyr)
separate(df, LM, into = c("LM_num1", "LM_num2"), convert = TRUE) %>%
        mutate(LM_num = LM_num1 + LM_num2)

或者使用parse_number

library(readr)
df$LM_num <- parse_number(df$LM)

或者另一個選項是eval(parse

df$LM_num <- sapply(df$LM, function(x) eval(parse(text = x)))

假設df在最后的 Note 中可重復給出,請使用下面的第一行獲取第一個數字或第二行獲取總和。 他們都讀取LM列,就好像它是一個文件拆分+創建一個兩列數據框。 第一行提取第一列,而第二行添加兩列。 不使用任何包。

transform(df, LM_num = read.table(text = LM, sep = "+")[[1]])
transform(df, LM_num = rowSums(read.table(text = LM, sep = "+")))

筆記

df <- data.frame(LM = c("91+2", "89+3", "88+2"))

另一種選擇是:

x <- '92+3'    
sum(as.numeric(strsplit(x, split = '+',fixed = TRUE)[[1]]))

如果有data.frame

df <- data.frame(LM = c("91+2", "89+3", "88+2"))

df$sum <- sapply(seq_len(nrow(df)), 
                 function(i) sum(as.numeric(strsplit(df$LM, split = '+', fixed = TRUE)[[i]])))

#     LM sum
# 1 91+2  93
# 2 89+3  92
# 3 88+2  90

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM