![](/img/trans.png)
[英]Subset rows on one datatable based on multiple column values of another datatable
[英]Subset DataTable based on Numeric Values in Columns
這是我的第一個堆棧溢出帖子,所以請多多包涵...
我希望在R中對數據表進行子集化,以便僅包含數字的行-排除包含字符的行。 例如表
Date Temperature
41941.6656 1921
41941.6656 1921
41941.66561 1921
41941.66563 1921
41941.66564 1921
41941.pypito 1921
41941.66566 xWRET
41941.66567 1921
應該成為
Date Temperature
41941.6656 1921
41941.6656 1921
41941.66561 1921
41941.66563 1921
41941.66564 1921
41941.66567 1921
其中xWRET代表我的愚蠢儀器經常出現的一些隨機字符串
我已經嘗試過is.numeric()
和grep()
但是我都不能工作。
我覺得這應該很簡單!
謝謝!
我認為data.table
的更一般有效的用法是使用.SD
和lapply
(以防您要轉換多於兩列並且不想手動指定它們的情況)
或
library(data.table)
na.omit(setDT(df)[, lapply(.SD, function(x) as.numeric(as.character(x)))])
# Date Temperature
# 1: 41941.67 1921
# 2: 41941.67 1921
# 3: 41941.67 1921
# 4: 41941.67 1921
# 5: 41941.67 1921
# 6: 41941.67 1921
要么
setDT(df)[, names(df) := lapply(.SD, function(x) as.numeric(as.character(x)))][complete.cases(df)]
# Date Temperature
# 1: 41941.67 1921
# 2: 41941.67 1921
# 3: 41941.67 1921
# 4: 41941.67 1921
# 5: 41941.67 1921
# 6: 41941.67 1921
如果您還不熟悉data.table及其相對復雜的用法,您也可以使用基本函數。
假設您將data.frame列作為字符。
df$Date <- as.numeric(df$Date)
df$Temperature <- as.numeric(df$Temperature)
要么
df1 <- sapply(df, as.numeric)
最后
df[complete.cases(df), ]
df1[complete.cases(df1), ]
要得到
Date Temperature
[1,] 41941.67 1921
[2,] 41941.67 1921
[3,] 41941.67 1921
[4,] 41941.67 1921
[5,] 41941.67 1921
[6,] 41941.67 1921
有關data.table
簡介的更多信息, data.table
點擊此處
當然,這當然不是最好的方法,但是可以這樣做:
library(data.table) # use this package, it is great for perfomance
lines="
41941.6656 1921
41941.6656 1921
41941.66561 1921
41941.66563 1921
41941.66564 1921
41941.pypito 1921
41941.66566 xWRET
41941.66567 1921"
con <- textConnection(lines)
d = data.table(read.table(con,stringsAsFactors = FALSE,
sep=" ",
col.names=c("Date", "Temperature"),
fill=FALSE,
strip.white=TRUE))
close(con)
d<-d[!is.na(as.numeric(Temperature)) & !is.na(as.numeric(substr(Date,start=7,stop=7)))]
這對我來說,返回以下內容:
Date Temperature
1: 41941.6656 1921
2: 41941.6656 1921
3: 41941.66561 1921
4: 41941.66563 1921
5: 41941.66564 1921
6: 41941.66567 1921
這是你想要的嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.