मेरे पास एक data.frame है जिसे tmp कहा जाता है। यहाँ सारांश है:

> summary(tmp)
 Organization       Advance Monthly Sales     Other       Homeownership Rate
 Length:2460        Min.   :  0           Min.   :    0   Min.   :   0      
 Class :character   1st Qu.:  0           1st Qu.:    0   1st Qu.:   0      
 Mode  :character   Median :  0           Median :    2   Median :   0      
                    Mean   :  1           Mean   :   53   Mean   :   3      
                    3rd Qu.:  0           3rd Qu.:   14   3rd Qu.:   0      
                    Max.   :637           Max.   :34622   Max.   :3272      
 New Residential Construction New Residential Sales Construction Spending
 Min.   :   0                 Min.   :   0          Min.   :    0        
 1st Qu.:   0                 1st Qu.:   0          1st Qu.:    0        
 Median :   0                 Median :   0          Median :    0        
 Mean   :  10                 Mean   :   1          Mean   :   83        
 3rd Qu.:   0                 3rd Qu.:   0          3rd Qu.:    0        
 Max.   :9078                 Max.   :1856          Max.   :60630        
 U.S. International Manufacturing and Trade Advance Report on Durable Goods
 Min.   :    0      Min.   :  0             Min.   :   0                   
 1st Qu.:    0      1st Qu.:  0             1st Qu.:   0                   
 Median :    0      Median :  0             Median :   0                   
 Mean   :   18      Mean   :  0             Mean   :   2                   
 3rd Qu.:    3      3rd Qu.:  0             3rd Qu.:   0                   
 Max.   :11992      Max.   :874             Max.   :4785                   
 Quarterly Financial Report Advance U.S. Intl Trades Monthly Wholesale Trade
 Min.   :  0                Min.   :  0              Min.   :  0            
 1st Qu.:  0                1st Qu.:  0              1st Qu.:  0            
 Median :  0                Median :  0              Median :  0            
 Mean   :  0                Mean   :  0              Mean   :  0            
 3rd Qu.:  0                3rd Qu.:  0              3rd Qu.:  0            
 Max.   :478                Max.   :849              Max.   :697            
 Quarterly Services Survey Business Formation Statistics     Total  
 Min.   :  0               Min.   :  0                   Min.   :0  
 1st Qu.:  0               1st Qu.:  0                   1st Qu.:0  
 Median :  0               Median :  0                   Median :0  
 Mean   :  0               Mean   :  0                   Mean   :0  
 3rd Qu.:  0               3rd Qu.:  0                   3rd Qu.:0  
 Max.   :423               Max.   :233                   Max.   :0

मैं कॉलम "एन" बनाने के लिए इस कमांड का उपयोग कर रहा हूं

tmp$Total <- rowSums(tmp[, -1])

और फिर मैं यह आउटपुट देखता हूं:

> head(tmp, 1)
                          Organization Advance Monthly Sales Other
1 VeriSign Infrastructure & Operations                     1     0
  Homeownership Rate New Residential Construction New Residential Sales
1                  0                            0                     0
  Construction Spending U.S. International Manufacturing and Trade
1                     0                  0                       0
  Advance Report on Durable Goods Quarterly Financial Report
1                               0                          0
  Advance U.S. Intl Trades Monthly Wholesale Trade Quarterly Services Survey
1                        0                       0                         0
  Business Formation Statistics         Total
1                             0 4.940656e-324

मुझे पता है कि यह अच्छा नहीं लग रहा है, लेकिन आप देख सकते हैं कि पंक्ति का योग 1 जैसा कुछ होना चाहिए, लेकिन इसके बजाय मैं इस बहुत छोटे अंश के साथ समाप्त कर रहा हूं। क्या मुझसे यहां कुछ गलत हो रहा है?

*** संपादित करें ***

> dput(head(tmp, 1))
structure(list(Organization = "VeriSign Infrastructure & Operations", 
    `Advance Monthly Sales` = structure(4.94065645841247e-324, class = "integer64"), 
    `New Residential Sales` = structure(0, class = "integer64"), 
    `U.S. International` = structure(0, class = "integer64"), 
    Other = structure(0, class = "integer64"), `New Residential Construction` = structure(0, class = "integer64"), 
    `Advance Report on Durable Goods` = structure(0, class = "integer64"), 
    `Homeownership Rate` = structure(0, class = "integer64"), 
    `Construction Spending` = structure(0, class = "integer64"), 
    `Manufacturing and Trade` = structure(0, class = "integer64"), 
    `Quarterly Financial Report` = structure(0, class = "integer64"), 
    `Advance U.S. Intl Trades` = structure(0, class = "integer64"), 
    `Monthly Wholesale Trade` = structure(0, class = "integer64"), 
    `Quarterly Services Survey` = structure(0, class = "integer64"), 
    `Business Formation Statistics` = structure(0, class = "integer64")), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

*** संपादित करें 2 ***

कुछ और सामान:

> tmp$"Advance Monthly Sales"
integer64
[1] 1   0   0   1   0   0   0   0   0   2   0   0   9   0   0   0   0   0  
[19] 0   0   0   0   1   0   0   0   0   1   0   0   0   8   0   0   0   1   
[37] 0   0   1   0   0   1   0   0   0   0   0   0   0   0   1   0   0   0  
[55] 1   0   0   0   0   0   1   0   0   0   4   0   0   0   0   0   0   0  
[73] 0   1   13  0   0   0   0   0   0   0   0   0   2   0   0   0   0   0  
[91] 0   0   14  0   0   0   1   0   9   0   0   0   0   0   1   0   0   0 

> tmp$"Advance Monthly Sales" %>% class()
[1] "integer64"
> tmp2 <- tmp
> tmp2$"Advance Monthly Sales" <- as.numeric(tmp2$"Advance Monthly Sales")
> tmp2$"Advance Monthly Sales" %>% class()
[1] "numeric"
> dput(head(tmp2, 1))
structure(list(Organization = "VeriSign Infrastructure & Operations", 
    `Advance Monthly Sales` = 1, `New Residential Sales` = structure(0, class = "integer64"), 
    `U.S. International` = structure(0, class = "integer64"), 
    Other = structure(0, class = "integer64"), `New Residential Construction` = structure(0, class = "integer64"), 
    `Advance Report on Durable Goods` = structure(0, class = "integer64"), 
    `Homeownership Rate` = structure(0, class = "integer64"), 
    `Construction Spending` = structure(0, class = "integer64"), 
    `Manufacturing and Trade` = structure(0, class = "integer64"), 
    `Quarterly Financial Report` = structure(0, class = "integer64"), 
    `Advance U.S. Intl Trades` = structure(0, class = "integer64"), 
    `Monthly Wholesale Trade` = structure(0, class = "integer64"), 
    `Quarterly Services Survey` = structure(0, class = "integer64"), 
    `Business Formation Statistics` = structure(0, class = "integer64")), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

फिर मैं tmp2$Total <- rowSums(tmp2[, -1]) फिर से कोशिश करता हूं और मुझे अभी भी निम्नलिखित मिलते हैं:

> head(tmp2$Total, 20)
 [1]  1.000000e+00 1.976263e-322 4.940656e-324  1.000000e+00 4.940656e-324
 [6] 6.958915e-320 3.952525e-323 4.940656e-324 3.458460e-323  2.000000e+00
[11] 1.037538e-322 1.235164e-322  9.000000e+00 4.940656e-324 4.940656e-324
[16] 4.940656e-324 1.828043e-322 4.940656e-324 4.940656e-324 4.001932e-322
r
0
bcstryker 16 फरवरी 2021, 23:30
1
क्या base::rowSums(tmp[, -1]) आपको वही मान देता है? आप अपने प्रश्न में dput(head(tmp, 1)) भी जोड़ सकते हैं
 – 
rawr
16 फरवरी 2021, 23:36
1
@FrsLry, यह वैध है, देखें ?Extract (जिसमें ?[ और ?[[ शामिल हैं) और "नकारात्मक" खोजें।
 – 
r2evans
16 फरवरी 2021, 23:47
1
ठीक है, मैं अब उत्सुक हूँ। यह शाब्दिक न्यूनतम मान प्रतीत होता है जिसका R प्रतिनिधित्व कर सकता है - देखें ?.Machine: "एक विशिष्ट R प्लेटफॉर्म पर सबसे छोटा सकारात्मक डबल लगभग '5e-324'" है, जैसा कि यहां भी है - stackoverflow.com/questions/38165221/…
 – 
thelatemail
17 फरवरी 2021, 00:33
Bcstryker, क्या आप कृपया dput(head(tmp,1)) से आउटपुट जोड़ सकते हैं?
 – 
r2evans
17 फरवरी 2021, 00:49
str(tmp) का आउटपुट क्या है? यदि प्रश्न पर सब कुछ सही है, तो मैं केवल परिवर्तनीय प्रकारों को संभावित समस्या के रूप में देख सकता हूं।
 – 
Freguglia
17 फरवरी 2021, 01:00

2 जवाब

सबसे बढ़िया उत्तर

मुझे पता चला कि मुझे क्या करना है:

> is.integer64 <- function(x){
  class(x)=="integer64"
}
> sel <- sapply(tmp, is.integer64)
> tmp[sel] <- lapply(tmp[sel], as.numeric)
> dput(head(tmp, 1))
structure(list(Organization = "VeriSign Infrastructure & Operations", 
    `Advance Monthly Sales` = 1, `New Residential Sales` = 0, 
    `U.S. International` = 0, Other = 0, `New Residential Construction` = 0, 
    `Advance Report on Durable Goods` = 0, `Homeownership Rate` = 0, 
    `Construction Spending` = 0, `Manufacturing and Trade` = 0, 
    `Quarterly Financial Report` = 0, `Advance U.S. Intl Trades` = 0, 
    `Monthly Wholesale Trade` = 0, `Quarterly Services Survey` = 0, 
    `Business Formation Statistics` = 0, Total = 1), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))
> tmp$Total <- rowSums(tmp[, -1])
> head(tmp2$Total,20)
 [1]     2    40     1     8     1 14085     8     1     7    41    21    25
[13]   129     1     1     1    37     1     1    81

सभी को फिर से धन्यवाद!

1
bcstryker 18 फरवरी 2021, 18:06

यह मेरा अनुमान है कि क्या हो रहा है

df <- data.frame(x = bit64::as.integer64(1), y = 0)
print(df)
#>   x y
#> 1 1 0
rowSums(df)
#> [1] 4.940656e-324

आप जिस भी तरीके से अपना डेटा आयात कर रहे हैं, वह Advance Monthly Sales को 64 बिट पूर्णांक बना सकता है।

सबसे आसान उपाय है कि उस कॉलम को as.numeric() से डबल कर दिया जाए।


ऐसा लगता है कि हर कॉलम integer64 है। समस्या यह है कि rowSums वर्ग को योग से अलग कर देता है। एक आसान उपाय बस इसे वापस रखना है

library(bit64)
df <- data.frame(x = as.integer64(1), y = as.integer64(2))
df$z <- rowSums(df)
print(df)
#>   x y             z
#> 1 1 2 1.482197e-323
class(df$z) <- 'integer64'
df
#>   x y z
#> 1 1 2 3

या आप as.numeric के साथ हर कॉलम को डबल्स में बदल सकते हैं।

1
pseudospin 18 फरवरी 2021, 07:08
अरे @pseudospin मैंने कोशिश की कि आपने क्या सिफारिश की और वही अंतिम आउटपुट था। प्रश्न दूसरा संपादन देखें। tmp$"अग्रिम मासिक बिक्री" निश्चित रूप से पूर्णांक 64 थी, लेकिन अब यह संख्यात्मक है, मुझे अभी भी पंक्तिसम () से ये अजीब आउटपुट मिल रहे हैं।
 – 
bcstryker
18 फरवरी 2021, 02:43