我想在我的 df 上使用更長時間的資料透視,但并不是我的所有列都是 as.characters,因為我有 10 多列我需要更改有沒有人知道如何在一個引數中執行此操作以節省我為所有的寫出來年?
我的 df 看起來像這樣;
fisheries_df
`Series Name` `Country Name` `1997` `1998` `1999` `2000` `2001` `2002` `2003` `2004` `2005` `2006` `2007` `2008` `2009` `2010` `2011` `2012`
1 Total fisheri… Albania 1110.8 2807.5 3057.9 3635 3597.2 4516.8 4274.6 6118.5 6473 7.71e3 7.51e3 7.36e3 8.13e3 7.85e3 7.35e3 1.23e4
2 Total fisheri… Algeria 91907… 92620 102649 11351… 134082 13480… 141376 11405… 12662… 1.46e5 1.48e5 1.42e5 1.30e5 9.52e4 1.04e5 1.08e5
3 Total fisheri… Cyprus 25788 20482 41060 70223 56606 142941 49561 82269 64933 3.35e4 5.65e3 5.40e3 5.11e3 5.55e3 5.85e3 5.66e3
我用來旋轉df的代碼和錯誤訊息如下,假設字符問題是我的問題;
fisheries_longer = pivot_longer(fisheries_df, c(3:26), c('year'))
Error in `stop_vctrs()`:
! Can't combine `1997` <character> and `2006` <double>.
Run `rlang::last_error()` to see where the error occurred.
uj5u.com熱心網友回復:
單列/多列可能是character類。我們可以使用values_transform轉換為character型別(as character ,然后根據需要進行修改
library(tidyr)
pivot_longer(fisheries_df, c(3:26), 'year', values_transform = as.character)
或將其更改為as.numeric- 如果有非數字元素,它將被轉換為NA
pivot_longer(fisheries_df, c(3:26), 'year', values_transform = as.numeric)
uj5u.com熱心網友回復:
嘗試這個 。它使用@akrunsvalues_transform()但帶有串列:請參見此處:pivot_longer: values_ptypes: can't convert <integer> to <character>
library(dplyr)
library(tidyr)
df %>%
pivot_longer(
cols = -c(1:3),
names_to = "key",
values_to = "val",
values_transform = list(val = as.character))
X.Series Name. X.Country key val
<int> <chr> <chr> <chr> <chr>
1 1 Total fisheri Name..1 Albania
2 1 Total fisheri X.1997. 1110.8
3 1 Total fisheri X.1998. 2807.5
4 1 Total fisheri X.1999. 3057.9
5 1 Total fisheri X.2000. 3635
6 1 Total fisheri X.2001. 3597.2
7 1 Total fisheri X.2002. 4516.8
8 1 Total fisheri X.2003. 4274.6
9 1 Total fisheri X.2004. 6118.5
10 1 Total fisheri X.2005. 6473
# ... with 24 more rows
# i Use `print(n = ...)` to see more rows
df <- structure(list(X.Series = 1:2, Name. = c("Total", "Total"), X.Country = c("fisheri",
"fisheri"), Name..1 = c("Albania", "Algeria"), X.1997. = c(1110.8,
91907), X.1998. = c(2807.5, 92620), X.1999. = c(3057.9, 102649
), X.2000. = c(3635L, 11351L), X.2001. = c(3597.2, 134082), X.2002. = c(4516.8,
13480), X.2003. = c(4274.6, 141376), X.2004. = c(6118.5, 11405
), X.2005. = c(6473L, 12662L), X.2006. = c(7710, 146000), X.2007. = c(7510,
148000), X.2008. = c(7360, 142000), X.2009. = c(8130, 130000),
X.2010. = c(7850, 95200), X.2011. = c(7350, 104000), X.2012. = c(12300,
108000)), class = "data.frame", row.names = c(NA, -2L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521625.html
標籤:r
上一篇:根據R中資料框中的值分配名稱?
