将 class 从字符更改为整数但保留其中的所有数据

Changing class from character to integer but retaining all the datas inside

q7 <- dbGetQuery(conn, "SELECT TailNum AS TailNum, AVG(ontime.DepDelay) AS avg_delay, ontime.Year AS Year, planes.Year AS yearmade FROM planes JOIN ontime USING(tailnum) 其中 ontime.Cancelled = 0 AND planes.Year != '' AND planes.Year != 'None' AND ontime.Diverted = 0 AND ontime.DepDelay > 0 按尾号分组 按 avg_delay")

排序

我试过的代码: q7 <- data.frame( yearmade = q7.yearmade, stringsAsFactors = FALSE)

^ 数据框

嗨!基本上我想创建一个新列,其中 Year 将减去 yearmade 并放入一个新列中,但在我这样做之前,我发现我从另一个 table 中绘制到此数据框中的数据显示as character(yearmade),有什么方法可以改变它但保留里面的原始数据吗?

先用as.numeric()yearmade改成数值变量。然后你可以简单地计算 Yearyearmade.

之间的差异

我相信这对你有用。

set.seed(1)

Year <- 2000:2022
yearmade <- sample(c('2000', '1999', '1998'), length(Year), replace = TRUE)
TailNum <- sample(c('N3738B', 'N3737C', 'N37342'), length(Year), replace = TRUE)
avg_delay <- 1:length(Year)
q7 <- data.frame(TailNum, avg_delay, Year, yearmade)

# compute difference and add to data frame
q7$year_diff <- q7$Year - as.numeric(q7$yearmade)

这保留了原始数据,但引入了一个新列year_diff

> str(q7)
'data.frame':   23 obs. of  5 variables:
 $ TailNum  : chr  "N3738B" "N3738B" "N3737C" "N3738B" ...
 $ avg_delay: int  1 2 3 4 5 6 7 8 9 10 ...
 $ Year     : int  2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 ...
 $ yearmade : chr  "2000" "1998" "2000" "1999" ...
 $ year_diff: num  0 3 2 4 4 7 8 8 9 11 ...