簡體   English   中英

基於列中的數值的子集數據表

[英]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的更一般有效的用法是使用.SDlapply (以防您要轉換多於兩列並且不想手動指定它們的情況)

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.

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