簡體   English   中英

R列中條件值的變化

[英]Conditional changes of values in a column R

我正在嘗試更改“緯度”和“經度”列中的值。 我想放南而不是南(緯度),並使數字為負。 如果是北,我只想放N。我想對經度做同樣的事情,然后放字母。 我希望西方是消極的,東方是積極的。

這是我的數據框的一部分

請讓我知道我該如何完成!

對於定義為df的數據幀

# build a sample data frame with two columns, lat and long
df <- data.frame(Lat = c("1.2N", "1.2S", "35.5N", "33.4S"),
                 Long = c("113.8W", "113.5W", "43.2E", "55.4E"))

# use gsub with signature gsub(PATTERN, REPLACEMENT, X)
# where you use a regex for the pattern and replacement
# and X is your target.
df$Lat <- gsub("(\\d*\\.\\d*)N","\\1", df$Lat, perl = TRUE)
df$Lat <- gsub("(\\d*\\.\\d*)S","-\\1", df$Lat, perl = TRUE)
df$Long <- gsub("(\\d*\\.\\d*)W","\\1", df$Long, perl = TRUE)
df$Long <- gsub("(\\d*\\.\\d*)E","-\\1", df$Long, perl = TRUE)

所以現在剩下的唯一工作就是計算正則表達式,這對R而言並沒有什么特別之處,除了在其他任何地方用\\w ,在R中您需要將\\\\w等。

因此,我們想匹配數字,因此一個正則表達式數字是(R中的) \\\\d ,因此我們想捕獲十進制之前和之后的所有數字,這意味着

\\d*.\\d*

但是. 正則表達式中的特殊字符,因此讓我們對其進行轉義

\\d*\\.\\d*

現在讓我們想到N ,我們想在替換中將其刪除,因此我們需要對數字進行分組以使它們保持匹配。 我們用括號來做到這一點。 所以,一群人和這封信給我們

(\\d*\\.\\d*)N

我們可以用\\\\1來指代我們捕獲的捕獲組。 所以我們的替換正則表達式很簡單

\\1 which really means \\d*\\.\\d*

和S類似,我們在每個匹配項的前面添加-

-\\1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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